https://programmers.co.kr/learn/courses/30/lessons/77484
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
해당 문제는 Programmers의 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 문제집에 있는 문제로 Level 1에 해당되는 문제입니다.
해당 문제에서는 입력 값으로 구매한 로또 번호(단, 몇몇 번호는 지워진 상태로 입력될 수 있음)와 당첨 번호가 주어지고 최대 등수와 최소 등수를 구하는 게 목표입니다.
접근 방식
구매한 로또 번호의 몇몇 숫자는 지워진 상태일 수 있습니다.
지워진 상태의 로또 번호는 0으로 주어지며 0에 적절한 수를 채워넣어 최대 등수와 최소 등수를 구해야 합니다.
가능한 최소 등수는 0에 해당되는 숫자가 모두 틀린 숫자인 경우입니다.
즉, 현재 알아볼 수 있는 숫자 중 당첨 번호와 일치하는 개수에 해당되는 등수입니다
가능한 최대 등수는 0에 해당되는 숫자가 모두 맞은 수자인 경우입니다.
즉, (현재 알아 볼 수 있는 숫자 중 당첨 번호와 일치하는 개수 + 0의 개수)에 해당되는 등수입니다.
등수는 높을수록(=등수의 수가 작을수록) 맞은 수의 개수는 많아집니다.(= 맞은 수의 숫자 커집니다.)
따라서 등수 계산에는 아래와 같은 공식이 적용됩니다.
등수 = 6 if (맞은 수의 개수) == 0 else 7 - (맞은 수의 개수)
위의 접근 방식대로 적용한 코드는 아래와 같습니다.
전체 코드
제출 언어: Python 3
def solution(lottos, win_nums):
answer = []
highestRank = 6
lowestRank = 6
RANKCOEFFICIENT = 7
cntZero = 0
correct = 0
for item in lottos:
if item == 0:
cntZero += 1
elif item in win_nums:
correct += 1
highestRank = 6 if cntZero + correct == 0 else RANKCOEFFICIENT - (cntZero + correct)
lowestRank = 6 if correct == 0 else RANKCOEFFICIENT - correct
answer.append(highestRank)
answer.append(lowestRank)
return answer
읽어 주셔서 감사합니다 :)
잘못된 부분이 있다면 댓글로 편히 알려주세요😊
'PS > Python' 카테고리의 다른 글
[Programmers] 다단계 칫솔 판매(파이썬, Python) (2) | 2021.07.24 |
---|---|
[Programmers] 행렬 테두리 회전하기(파이썬, Python) (0) | 2021.07.18 |
[백준] 14891 - 톱니바퀴 (파이썬, Python) (0) | 2021.07.08 |
[백준] 2374 - 같은 수로 만들기 (파이썬, Python) (0) | 2021.07.06 |
[백준] 19238 - 스타트 택시 (파이썬, Python) (0) | 2021.06.13 |