# 2021 Dev-Matching: 웹 백엔드 개발자(상반기)
문제
https://school.programmers.co.kr/learn/courses/30/lessons/77484
풀이
- 0을 제외한 숫자 中 일치하는 숫자 개수 = 최소
- (0이 모두 hit했다고 가정) 최소값 + 0 개수 = 최대
- switch 대신에 딕셔너리형 사용
- 파이썬에서는 switch/case 대신 dictionary 나 elif를 사용한다.
코드
def solution(lottos, win_nums):
first, last, dk = 0
for lotto in lottos:
if(win_nums.count(lotto)): #일치하는 로또 번호가 있을 경우
last += 1 #최소 개수+1
if(lotto == 0):first +=1 # 0일 경우 최대값에 +1
first += last #최대 = 최소 + 0 개수
rank={0:6,1:6,2:5,3:4,4:3,5:2,6:1]
return rank[first],rank[last]
다른 풀이
- 1. 리스트의 인덱스 이용하기 : rank=[6,6,5,4,3,2,1]
- 딕셔너리 대신에 아예 맞은 개수 = index로 치환 가능하므로 list를 이용하는게 더 나은 것 같다. 딕셔너리 쓰면서 왜 리스트 생각을 못했을까…
- list에 intersection 사용
rank[len(set(lottos) & set(win_nums)) + lottos.count(0)], rank[len(set(lottos) & set(win_nums))]
로또번호 ㅅ 당첨번호 -> 맞는 번호 개수 (최소)
0의 개수를 count를 이용해 구한다음 더함 (최대)
+
1. if 식으로 in을 사용할 수 있다.
for x in win_nums:
if x in lottos:
2. 리스트끼리도 교집합 연산이 가능하다.
'Algorithm > Programmars' 카테고리의 다른 글
[Python/Level.1] 문자열 내 p와 y의 개수 (0) | 2022.07.12 |
---|---|
[Python/Level.1] 약수의 개수와 덧셈 (0) | 2022.07.12 |
[Python/Level.1] 음양 더하기 (0) | 2022.07.09 |
[Python/Level.1] 모의고사 (0) | 2022.07.09 |
[Python/Level.1] 신고 결과 받기 [2022 KAKAO BLIND RECRUITMENT] (0) | 2022.07.07 |