Development Project

[ Programmers - 06/24 ] - 로또의 최고 순위와 최저 순위(Python)_Level1 본문

CodingTest/Programmers

[ Programmers - 06/24 ] - 로또의 최고 순위와 최저 순위(Python)_Level1

나를 위한 시간 2022. 6. 24. 14:02
  • 문제링크

https://programmers.co.kr/learn/courses/30/lessons/77484

 

 

 

  • 문제

 

 

 

  • 시행착오

등수가 맞은개수와는 반대로 증가하는 개념이라 계산하며 혼란이와 생각보다는 많이 틀렸다. 좀더 차분히 생각하고 적어봤으면 금방끝났을 것이라는 생각에 아쉬움이 좀 남았다.

 

 

 

  • 문제분석

lottos : 민우의 동생이 일부 혹은 전체를 지워버려 남은 로또번호 

win_nums : 로또당첨번호

위 2 인자를 받아

민수가 얻을수있는 최고 등수와 최저등수를 출력하는 문제이다. 로또번호는 0이 아닌경우 중복되지 않는다.

 

 

 

  • 각 파라미터의 유형

lottos = [44, 1, 0, 0, 31, 25]

<조건> 길이가 6인 정수 배열 and 0 ≤ lottos의 모든원소 ≤ 45 and 0은 민우의 동생이 지워버려 식별불가한 번호

==> 숫자로 이루어지고  0제외 같은 숫자가 여러개 존재하지 않으며, 위의 조건을 충족한다.

 

win_nums = [31, 10, 45, 1, 6, 19]

<조건> 길이가 6인 정수 배열 and 1 ≤ win_nums의 모든원소 ≤ 45

==> 숫자로 이루어지고 같은 숫자가 여러개 존재하지 않으며, 위의 조건을 충족한다.

 

 

 

  • 문제접근

※ 작성자가 문제를 보고 든 생각을 차례대로 써본 것이다. 이 순번은 정답이 아니며 매번 다른 생각을 해보길 권장한다.

1) lottos는 0이 아닌 모든 값들이 중복되지않고, win_nums는 모든 값들이 중복되지않는다. 게다가 둘의 공통점을 찾아야하므로, 집합자료형을 이용하여 교집합을 쓰는게 좋아보인다.

lottos=set(lottos)   #[1,2,3,4,5,6]
win_nums=set(win_nums)   #[1,2,7,8,4,5]
lottos & win_nums   #[1,2,4,5]

 

2)  0의 개수를 구하기위해 0을 제거하는 함수인 remove를 사용하고자 했지만 0이 없을경우 오류가 나므로 discard를 사용하기로 했다.

lottos.discard(0)

 

 

 

 

  • 최종코드
def solution(lottos, win_nums):
    answer=[]
    lottos=set(lottos)
    win_nums=set(win_nums)
    lottos.discard(0)
    a=1-len(lottos & win_nums)+len(lottos)
    answer.append(6 if a>6 else a)
    a=7-len(lottos & win_nums)
    answer.append(6 if len(lottos)==0 or a>6 else a)
    return answer
Comments