일단 백준이 아니라 프로그래머스를 선택한 이유는 프로그래머스 홈페이지가 훨씬 user-friendly하게 구성되어있어서이다.
거의 처음으로 풀어보는 코딩테스트 문제인데 머리로는 쉽게 생각했지만 아직 실전에서의 문법이 익숙하지 않아 비교적 오래 걸렸다.
이번 문제는 임의의 0을 포함한 로또번호와, 당첨 로또번호를 input으로 받았을 때 최선과 최악의 상황을 output으로 return 하는 문제였다.
일단 최선의 상황은 0으로 표기된 로또번호까지 당첨번호와 일치할 때고, 최악의 상황은 0으로 표기된 로또번호가 당첨번호와 모두 일치하지 않을 때이다.
그래서 먼저 당첨 번호와 몇 개의 번호가 같은지 count하고 여기에 0이 나온 횟수를 더하면 best case, 0을 제외하고 count만 하면 worst case로 분류해서 답을 도출하였다.
내가 작성한 코드
def solution(lottos, win_nums): zero = 0; same = 0; best = 0; worst = 0; for i in range(6): if lottos[i] == 0: zero = zero + 1 for j in range(6): if lottos[i] == win_nums[j]: same = same + 1 ㅤ ㅤ if same == 0 or same == 1: worst = 6 elif same == 2: worst = 5 elif same == 3: worst = 4 elif same == 4: worst = 3 elif same == 5: worst = 2 else: worst = 1 ㅤ if zero + same == 0 or zero+same == 1: best = 6 elif zero + same == 2: best = 5 elif zero + same == 3: best = 4 elif zero + same == 4: best = 3 elif zero + same == 5: best = 2 else: best = 1 ㅤ print(zero+same, same, best, worst) return [best, worst]
모범답안
def solution(lottos, win_nums): ㅤ rank=[6,6,5,4,3,2,1] ㅤ cnt_0 = lottos.count(0) ans = 0 for x in win_nums: if x in lottos: ans += 1 return rank[cnt_0 + ans],rank[ans]
일단 반성해야할 부분이 굉장히 많다.
rank와 count를 이용해서 복잡한 코드를 굉장히 단순화 시킨 것이 놀라웠다.
참고
문자열
count(a) find (‘a’) (위치 return) 없으면 -1 index (‘a’) (위치 return) 없으면 오류join (문자열 삽입) ex) “,”.join(‘abcd’) -> ‘a,b,c,d’upper(), lower() lstrip(), rstrip(), strip : 왼쪽 오른쪽 양쪽 공백 지우기 replace(“Life”, “Your leg”) : 문자열 대체 split(‘:’) : 문자열 나누기, 리스트로 반환문자열 -> 리스트 list(a) or split 리스트 -> 문자열 “”.join(a)리스트 추가
.append(a) .insert(index, a)리스트 더하기 +
.extend(추가할 리스트)리스트 삭제
list.remove(a) = del a[a.index(3)>> l = [1,2,3,4,5] >> for i in l[:]: ... print(i) ... l.remove(i)