Programmers_Lv.1_로또의 최고 순위와 최저 순위

Chiwoo Song·2022년 4월 17일
0

AlgorithmTraining

목록 보기
2/2

문제 Link


본인 문제 풀이

# 예시 데이터
lottos = [44,1,0,0,31,25]
win_nums = [31,10,45,1,6,19]

matchNum = 0 # 일치한 숫자 개수
zeroCount = 0 # 숫자 0의 개수
변수설명형식
matchNum구매한 로또 번호에서 당첨번호와 일치하는 개수int
zeroCount구매한 로또 번호에서 보이지 않는 번호 (0) 개수int
for lot_num in lottos:
    if lot_num in win_nums: # lottos의 숫자를 순서대로 불러내어 당첨 번호 리스트에 포함되는지 확인
        matchNum += 1 # 일치하면 matchNum +1
    elif lot_num == 0: # lottos의 숫자가 0이라면
        zeroCount += 1 # zeroCount +1
  • 구매한 로또 번호를 순서대로 불러와 당첨 번호 리스트에 있는 번호와 비교
  • 일치한다면 matchNum 변수를 +1 한다.
  • 만약 번호가 0 이라면 zeroCount 변수를 +1 한다.
maxWin = matchNum + zeroCount # 일치한 개수와 0의 개수를 더함
변수설명형식
maxWin구매한 로또 번호에서 당첨 번호와 일치하는 숫자의 개수와 0의 개수 합int
  • 최대로 맞출 수 있는 번호 개수가 몇 개인지 구하기 위해 구매한 로또 번호에서 당첨 번호와 일치한 개수와 0의 개수를 더함.
if zeroCount == 6: #모든 숫자가 0일 경우 대비
    matchNum = 1
    maxWin = 6
elif matchNum == 0: # 모든 숫자가 일치하지 않을 경우 (0이 없음)
    matchNum = 1
    maxWin = 1
  • 모든 숫자가 0 일 경우 (모두 안보이는 경우)에는 matchNum을 1로 maxWin을 6으로 한다.

    • matchNum이 사실상 맞춘 로또 번호의 최소 개수를 나타내기 때문이다.
    • 0으로 두지 않고 1로 둔 이유는 뒤에 나올 answer를 구하는 식 때문이다.
  • 모든 숫자가 0도 없고 당첨 번호와 일치하지 않을 경우 matchNum을 1로 maxWin을 1로 한다.

answer = [7-maxWin, 7-matchNum] # 7에서 maxWin과 matchNum 을 빼 순위 계산
  • 7에서 maxWin 값을 빼 최고 순위를 구한다. (모두 맞혔을 시 7-6이 되어 1등이 나옴)
  • 7에서 matchNum 값을 빼 최저 순위를 구한다.
answer
[3, 5]
  • 정답이 나온다.



모범 풀이

  • 다른 개발자들의 풀이법이다.
rank = [6,6,5,4,3,2,1] # 순서대로 순위를 미리 정의함
  • 우선 순위 순서대로 리스트를 정의한다.
cnt_0 = lottos.count(0) # lottos에서 0의 개수를 셈
  • .count 함수를 이용하여 구매한 로또 번호에서 0의 개수를 센다.
ans = 0
  • ans 변수 정의
for x in win_nums: #정답 번호를 1개씩 불러와
    if x in lottos: # 구매한 로또에 포함되어 있는 숫자라면 ans +1
        ans += 1
  • 정답 번호를 1개씩 불러와서 구매한 로또 번호에 해당 번호가 포함되어 있는지 확인
  • 포함되어 있다면 ans 변수 +1
print(rank[cnt_0 + ans], rank[ans])
# 최대 순위 : 0의 개수와 정답 개수를 합쳐 해당하는 rank의 index 참조
# 최소 순위 : 맞춘 정답의 개수에 해당하는 rank의 index 참조
  • 0의 개수와 정답 개수를 합한 값을 index로 활용하여 rank 리스트의 해당 index의 값 확인
  • ans의 값을 index로 활용하여 rank 리스트의 해당 index의 값 확인
    3 5
  • 정답이 나온다.

느낀점

  1. 규칙 기반으로 모두 0인 경우와 모두 맞추지 못한 경우를 해결하려고 한 나의 풀이가 어이없어서 귀엽다.
  2. rank를 리스트로 정의하여 index 값으로 순위를 구하는 방법이 참신하고 배울 부분이 크다.
  3. 좀 더 생각을 깊게해보자.
profile
Shallow but broad knowledge

0개의 댓글

관련 채용 정보