728x90
<문제 설명>
https://programmers.co.kr/learn/courses/30/lessons/77484
민우가 선택한 6개의 숫자와 당첨 숫자를 비교하는 문제이다.
6개의 숫자 중 일부는 알아볼 수 없게 되어, 정확하게 당첨 숫자와의 일치는 알수 없게 되었지만,
당첨이 가능했던 최고 순위와 최저 순위를 생각해 보는 것이 문제의 핵심이다.
입출력 예는 다음과 같다.
lottos | win_nums | result |
[44, 1, 0, 0, 31, 25] | [31, 10, 45, 1, 6, 19] | [3, 5] |
[0, 0, 0, 0, 0, 0] | [38, 19, 20, 40, 15, 25] | [1, 6] |
[45, 4, 35, 20, 3, 9] | [20, 9, 3, 45, 4, 35] | [1, 1] |
알아보지 못하는 수는 0으로 표현 되었고, 로또 특성상 같은 숫자는 한번만 배열에 등장한다.
<문제 해결 아이디어>
우선 정렬이 되어있지 않다고 나와있어서 python의 in, not in을 이용해서 숫자를 비교하기로 했다.
lottos에 있는 숫자 하나씩 win_nums에 있는지를 비교하는 함수를 만들고,
0이 있는 경우와 없는 경우로 분리하여 각 경우에 위 함수를 적용했다.
0이 없는 경우는 최고 득점과 최저 득점이 같으므로 위 함수를 한번만 사용했고,
0이 있는 경우에는 0을 고려 하지 않고 우선 함수를 사용한 뒤, 이를 최저 득점(최저 순위)로 저장했다.
최고 득점(순위)는 여기서 0이 모두 win_nums에 있는 숫자일 경우 이므로 최저 순위에 0의 갯수만큼 빼줬다.
(빼준 이유는 1순위가 제일 좋은 것이라 로또 숫자를 맞출때 마다 제일 안 좋은 순위로 부터 그 개수 만큼 빼주는 아이디어였기 때문이다.)
이 아이디어를 코드로 작성한 것이 아래의 풀이 코드 이다.
<문제 풀이 코드>
def solution(lottos, win_nums):
answer = []
cnt = 7 # 6순위가 1개일치 or 모두 불일치라서 초기값을 7로 잡고 7과 6을 동일하게 6으로 취급
if 0 not in lottos:
result = cntNums(cnt,lottos,win_nums)
answer.append(result)
answer.append(result)
else:
resultMin = cntNums(cnt,lottos,win_nums)
zeroCnt = lottos.count(0)
if zeroCnt == 6: # 모두 0일 경우 0순위라고 표기되는 오류를 해결하기 위해 넣음
resultMax = 1
else:
resultMax = resultMin-zeroCnt
answer.append(resultMax)
answer.append(resultMin)
return answer
def cntNums(cnt,lottos,win_nums): # 당첨 숫자가 얼마나 있는지 확인하는 함수
for i in range(6):
if lottos[i] in win_nums:
cnt -= 1
if cnt > 6:
cnt = 6
return cnt
728x90
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스 lv 1] 같은 숫자는 싫어.py (2) | 2022.01.17 |
---|---|
[프로그래머스 lv 1] 두 정수 사이의 합.py (0) | 2022.01.13 |
[프로그래머스 lv 1] 3진법 뒤집기.py (0) | 2022.01.12 |
[프로그래머스 lv 1] 내적.py (0) | 2022.01.11 |
[프로그래머스 lv 1] 음양 더하기.py (0) | 2022.01.05 |