문제
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 여기에서 제한사항은 다음과 같습니다.
- lottos는 길이 6인 정수 배열입니다.
- lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
- 0은 알아볼 수 없는 숫자를 의미합니다.
- 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
- lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
- win_nums은 길이 6인 정수 배열입니다.
- win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
- win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
- win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.
또한 로또의 순위는 다음과 같습니다.
여기에서 조건이 하나 존재하는데 알아볼 수 없는 번호는 0으로 표시하고, 여기에서 당첨가능한 최고 순위와 최저 순위를 차례대로 return 하는 함수를 만들면 됩니다.
풀이
이 문제를 정리하면 다음과 같습니다.
1. 로또는 문제와 같이 등수를 매김, 길이는 6
2. 0은 로또 숫자 중 알아볼 수 없는 정수를 의미함.
3. 이때 이 0이 모두 로또 번호와 일치하는 경우가 최고 등수, 0이 모두 로또 번호와 일치하지 않는 경우 최저등수
이 문제의 조건에 따라 문제를 풀이해보면, 각각 일치하는 개수가 담긴 변수 max와 min을 선언 해주고, 숫자가 일치하는 경우에는 max와 min을 둘다 1씩 증가시켜줍니다. 또 0의 경우에는 일치할 수도 일치하지 않을 수도 있기때문에 모두 일치한다 가정하는 max만 1 증가시켜줍니다.
그 다음 일치하는 개수를 기반으로 등수를 매겨야 하는데, 이 또한 3가지 경우가 존재합니다.
1. 최고등수, 최저등수 모두 일치하는 개수가 2보다 작은 경우
2. 최저등수만 일치하는 개수가 2보다 작은 경우
3. 그외의 모든 경우
일치하는 숫자의 개수가 2보다 작은 경우에는 자동으로 6등이 되며, 그 외에는 7에서 일치하는 개수를 빼주는 것이 로또 등수가 되며, 위의 3가지 경우를 if문을 사용하여 풀이를 진행해주면 됩니다. 소스코드는 아래와 같습니다.
소스코드
def solution(lottos, win_nums):
max = min = 0
answer = []
for i in lottos:
if(i ==0):
max+=1
for j in win_nums:
if(i == j):
max+=1
min+=1
if(max<2):
answer.append(6)
answer.append(6)
elif(min<2):
answer.append(7-max)
answer.append(6)
else:
answer.append(7-max)
answer.append(7-min)
return answer
'Algorithm > Python, C++' 카테고리의 다른 글
[프로그래머스] 소수 찾기(python) (0) | 2022.08.26 |
---|---|
[프로그래머스] 없는 숫자 더하기 (python) (0) | 2022.08.17 |
[프로그래머스] 완주하지 못한 선수 (python) (0) | 2022.08.09 |
백준 1181_단어정렬 [C++] (0) | 2022.07.19 |
백준 11651_좌표 정렬하기 2 [C++] (0) | 2022.07.18 |
댓글