문제
https://programmers.co.kr/learn/courses/30/lessons/77484
내가 생각했던 풀이과정
1. 일단 0의 갯수를 셉니다.
0의 갯수를 세어야하는 이유는 0의 숫자만큼 숫자가 지워졌을 때 두 가지 경우로 나눠지기 때문 입니다.
1) 최선의 조건일 때는 0 대신에 로또 당첨 숫자에 맞는 숫자를 넣을 수 있습니다.
2) 최악의 조건일 때는 0 대신에 로또 당첨 숫자에 맞지 않는 숫자를 넣을 수 있습니다.
2. 두번째로 0을 제외한 경우 맞은 갯수를 셉니다.
3.
최선의 경우: 0의 갯수 대로 1) 조건일 때는 맞은 갯수에 0의 갯수를 더해줍니다.
최악의 경우: 0의 갯수와 상관없이 맞은 갯수가 그대로 당첨 숫자와 일치한 갯수가 되게 됩니다.
4. 순위를 매겨야하기 때문에 rank에 [6, 6, 5, 4, 3, 2, 1] 배열을 만들어줍니다.
딕셔너리 형태도 고려를 해보았지만, 구조가 더 복잡하여 위와 같이 해결하였습니다.
6이 두번 들어간 이유는 인덱스 순위를 채우기 위함입니다.
5. rank[최선의 수], rank[최악의 수] 를 반환하여 결과를 반환합니다.
나의 풀이
def solution(lottos, win_nums):
# rank = {1:6, 2:5, 3:4, 4:3, 5:2, 6:1}
rank = [6, 6, 5, 4, 3, 2, 1]
answer = []
count = 0
zeroCount = 0
for k in lottos:
if k == 0:
zeroCount += 1
for i in range(len(win_nums)):
for j in range(len(lottos)):
if lottos[i] == win_nums[j]:
count += 1
best = count + zeroCount
return rank[best], rank[count]
다른 사람의 풀이
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]
count( ) 함수를 이용해 0의 갯수를 저장해주고, for 문을 2번 쓰는 대신 in 함수를 사용해 코드의 길이를 줄였습니다.
좀 더 깔끔해보이는 것 같습니다.
새로 알게된 점, 확인해야할 점
count(찾고자하는 요소): 값이, 리스트에 몇개나 들어있는지 확인하고자 할때, 리스트 뒤에 점( . )을 찍고 count() 함수에 원하는 값을 넣어주면 된다.
찾고자하는 요소에는 문자열이 들어가도 상관없다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로그래머스 알고리즘: LV2/87946 - 피로도 (1) | 2024.11.22 |
---|---|
[프로그래머스] 정수 제곱근 구하기 (0) | 2021.05.28 |
[프로그래머스] 더 맵게 (0) | 2021.05.04 |
[프로그래머스] 가장 큰 수 (0) | 2021.05.02 |
[프로그래머스] 폰켓몬 (0) | 2021.04.30 |
댓글