[프로그래머스] 로또의 최고 순위와 최저 순위
문제
https://programmers.co.kr/learn/courses/30/lessons/77484
난이도
LEVEL 1
풀이
틀린 내용 지적 환영합니다
첫번째 풀이
코드
def solution(lottos, win_nums):
grade = {6: 1, 5: 2, 4: 3, 3: 4, 2: 5, 1: 6, 0: 6}
wins = set(win_nums)
correct = 0
zero = 0
for lotto in lottos:
if lotto in wins:
correct += 1
elif lotto == 0:
zero += 1
return [grade[correct + zero], grade[correct]]
아이디어
- 로또 숫자는 중복되지 않으며, 찍은 번호와 로또 번호 순서는 상관 없이 찍은 번호가 로또 번호에 "포함"되기만 하면 됨 -> 포함여부 검사 복잡도가 낮은 set 이용
- 포함여부 검사 시 시간 복잡도: 리스트는 O(n), 집합은 O(1)
- 로또 순위에는 맞은 개수와 0의 개수가 결정적인 역할
- 찍은 번호를 하나씩 순회하며 0일 경우를 카운트
- 맞은 걸 틀리게 할 수는 없으므로 최저 순위는 0을 제외한 내가 맞은 번호들의 개수를 이용해 계산, 최고 순위는 0을 모두 정답으로 처리하였을 때 맞은 번호들의 개수를 이용해 계산
- grade에는 맞은 개수(key): 순위(value)를 저장
복잡도
O(n)
소요 시간
10분 이내 (안 재봄)
채점결과
수정한 풀이
코드
def solution(lottos, win_nums):
grade = [6, 6, 5, 4, 3, 2, 1]
correct = len(set(win_nums) & set(lottos))
zero = lottos.count(0)
return [grade[correct + zero], grade[correct]]
복잡도
O(n)
아이디어
- grade: 정답수가 0~6의 연속되는 정수로 한정되어 있음 -> 리스트의 인덱스를 정답수로 이용, 요소값은 순위
- set을 사용한 김에 win_nums와 lottos를 교집합하여 정답개수 구하기(!!!)
- zero는 별도 카운트
채점결과
Author And Source
이 문제에 관하여([프로그래머스] 로또의 최고 순위와 최저 순위), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dadahee/프로그래머스-로또의-최고-순위와-최저-순위저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)