반응형
문제설명
https://programmers.co.kr/learn/courses/30/lessons/77484
사고과정
- 이제 인프런 강의도 다 듣고 프로그래머스로 문제 유형을 사전에 확인하지 않고 실전 문제 풀이에 도전하고자 우선 프로그래머스 문제부터 도전했다.
- 해당 문제를 풀 때, 그리디 방식으로 푸는 느낌이었다. 우선 알아볼 수 없는 숫자 0개를 제외하고 정답과 민수가찍은 번호가 공통인 숫자들 개수가 가장 최저 순위가 되었다. 그리고 숫자 0이 모두 다 맞춘 숫자였을 경우에 최고 숫자가 된다.
- 그런데 이를 좀 노가다? 방식스럽게 함수까지 따로 작성하면서 구현하긴 했다. 맞추긴 했는데 코드가 너무 장황한 듯 해서 다른 사람들 풀이를 참고했는데 매우 인상적인 풀이가 나왔다. 우선 0개수를 셀때 난 for loop를 사용하긴 했지만 count 함수를 사용하는 방법도 있었다. 그리고 순위를 결정하기 위해 get_score 이라는 함수를 새로 정의했는데, 간결한 코드 풀이는 리스트의 인덱스를 순위, 값을 맞춘 숫자 개수로 지정하고 정의했다..이 부분이 매우 인상적이었다.
풀이
- 나의 풀이
def get_score(nums):
if nums == 6:
return 1
elif nums == 5:
return 2
elif nums == 4:
return 3
elif nums == 3:
return 4
elif nums == 2:
return 5
else:
return 6
def solution(lottos, win_nums):
common_nums = len(win_nums) - len(set(win_nums) - set(lottos))
zero_nums = 0
for l in lottos:
if l == 0:
zero_nums += 1
answer = []
min_nums = common_nums
max_nums = common_nums + zero_nums
answer.append(get_score(max_nums))
answer.append(get_score(min_nums))
return answer
- 간결한 풀이
def solution(lottos, win_nums):
# index를 순위, value를 맞춘 숫자 개수
rank = [6, 6, 5, 4, 3, 2, 1]
zero_cnt = lottos.count(0)
answer = 0
for x in win_nums:
if x in lottos:
answer += 1
return rank[zero_cnt + answer], rank[answer
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.12.06 |
---|---|
[프로그래머스] 신규 아이디 추천 (0) | 2021.12.06 |
[인프런] 회장뽑기 (0) | 2021.12.04 |
[인프런] 최대점수 구하기 (0) | 2021.12.04 |
[인프런] 동전교환 (0) | 2021.12.04 |