[프로그래머스] Lv1 - 로또의 최고 순위와 최저 순위

김멉덥·2023년 7월 17일
0

알고리즘 공부

목록 보기
54/171
post-thumbnail

문제

프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자(상반기)


코드 구현

def solution(lottos, win_nums):
    answer = []

    zero_count = lottos.count(0)        # 0의 개수
    match_num = 0       # 민우가 구매한 로또 번호가 당첨 번호와 일치하는 개수

    lottos.sort()
    win_nums.sort()

    # 당첨번호와 구매한 로또 번호가 일치하는지 센다.
    for i in lottos:
        if(i == 0):
            continue
        else:
            if(i in win_nums):
                match_num += 1

    best_score = zero_count + match_num     # 최고 점수 = 0인 부분이 당첨번호라고 가정한다면, 일치한 번호 개수 + 0의 개수 가 최고 점수
    worst_score = match_num                 # 최저 점수 = 0인 부분은 모두 틀렸을 때, 일치한 번호 개수만이 최저 점수

    winning_place = [6, 5, 4, 3, 2]         # 일치한 번호 개수에 따른 순위를 정하기 위해 생성한 배열
                                            # (6개 일치 = 1등, 즉 이 배열에서 인덱스 + 1 한게 순위가 된다)

    # 최고 점수를 순위로 매기는 작업
    if(best_score in winning_place):
        answer.append(winning_place.index(best_score) + 1)
    else:
        answer.append(6)

    # 최저 점수를 순위로 매기는 작업
    if (worst_score in winning_place):
        answer.append(winning_place.index(worst_score) + 1)
    else:
        answer.append(6)

    return answer


print(solution([44, 1, 0, 0, 31, 25], [31, 10, 45, 1, 6, 19]))
print(solution([0, 0, 0, 0, 0, 0], [38, 19, 20, 40, 15, 25]))
print(solution([45, 4, 35, 20, 3, 9], [20, 9, 3, 45, 4, 35]))

풀이

  • lottos 리스트와 win_nums 리스트에서 일치하는 번호의 개수와 0의 개수에 따라 순위가 결정되는 문제이다.
  • 정렬 후 → for문을 통해 만약 lottos에 있는 번호가 win_nums 리스트에도 있다면, 해당 개수를 count 해준다.
  • 그 뒤 점수를 계산하는데, 만약 0인 부분이 모두 당첨 번호와 일치한다고 가정하는게 최고 점수를 낼 수 있다. 따라서 실제로 일치한 번호의 개수 + 0의 개수 를 해주면 최고 점수가 나온다.
  • 반대로 0이 모두 틀렸을 경우가 최저 점수이므로, 실제로 일치한 번호의 개수만 따지는게 최저 점수이다.
  • 이렇게 구한 점수로 순위를 매겨준다. 순위는 winning_place 배열의 인덱스를 통해 매길 수 있었다.
  • n개의 번호가 일치하는 것에서 순위가 나오기 때문에 n에 대한 범위를 정해줄 필요 없이 그저 n의 값에 따라 해당 배열의 인덱스 + 1 을 해주면 순위가 나온다.

profile
데굴데굴 뚝딱뚝딱 개발기록

3개의 댓글

comment-user-thumbnail
2023년 7월 18일

글 잘 봤습니다, 많은 도움이 되었습니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

정말 좋은 정보 감사합니다!

답글 달기
comment-user-thumbnail
2023년 7월 18일

항상 좋은 글 감사합니다.

답글 달기