은공지능 공작소 :: 은공지능 공작소

안녕하세요.
오늘은 프로그래머스 lv1 문제 "로또의 최고 순위와 최저 순위" 문제 풀어보겠습니다.

 

 

해당 문제 바로가기 ↓↓↓↓ 하단 링크 클릭

https://school.programmers.co.kr/learn/courses/30/lessons/77484

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

1. 리스트의 count 함수 사용하여 0의 개수 세기


def solution(lottos, win_nums):
    # lottos: [44, 1, 0, 0, 31, 25]
    # win_nums: [31, 10, 45, 1, 6, 19]
    
    zeros = lottos.count(0)               # 리스트에서 0의 개수 세기
    print(zeros)
2
[리스트형 자료].count(세고 싶은 대상)
위와 같이 리스트에서 원하는 구성 요소들을 셀 수 있습니다.

lottos 리스트에 0은 2개 있으므로, zeros는 2 입니다.
이렇게 미리 0의 개수를 세어두면 문제를 간단히 풀 수 있습니다.

최고 점수는 0인 숫자들을 다 맞췄다고 생각하면 되고,
최저 점수는 0인 숫자들을 한 개도 못 맞췄다고 생각하면 되기 때문입니다.
다음 단계로 넘어가겠습니다.

 

 

 

 

 

2. 순위 값 딕셔너리로 미리 할당


def solution(lottos, win_nums):
    # lottos: [44, 1, 0, 0, 31, 25]
    # win_nums: [31, 10, 45, 1, 6, 19]

    zeros = lottos.count(0)               # 리스트에서 0의 개수 세기
    win = 0                               # win 변수 = 맞춘 개수 (0으로 초기화)
    scores = {0: 6, 1: 6, 2: 5, 3: 4,     # ★ 포인트1. 경우의 수가 7개 밖에 없으므로
              4: 3, 5: 2, 6: 1}           #           각각의 맞춘 개수에 순위 할당하기
                                          # ★ 포인트2. 0개 맞은 순위 = 1개 맞은 순위
순위 값들을 딕셔너리에 미리 할당해 두었습니다.
원래 코딩 테스트에서 하드 코딩은 지양해야 하지만,
지금은 워낙 경우의 수가 적으니까요.. (다 해도 7개 밖에 없습니다)

또 한 가지 포인트는, 0개 맞은 순위와 1개 맞은 순위가 같다는 것 입니다. (둘 다 꼴찌)
1개 맞아도 6등으로 처리해야 하고,
다 빗나가도 6등으로 처리해줘야 테스트를 통과할 수 있습니다.

 

 

 

 

 

3. 맞은 번호의 개수 세기


def solution(lottos, win_nums):
    # lottos: [44, 1, 0, 0, 31, 25]
    # win_nums: [31, 10, 45, 1, 6, 19]

    zeros = lottos.count(0)               # 리스트에서 0의 개수 세기
    win = 0                               # win 변수 = 맞춘 개수 (0으로 초기화)
    scores = {0: 6, 1: 6, 2: 5, 3: 4,     # ★ 포인트1. 경우의 수가 7개 밖에 없으므로
              4: 3, 5: 2, 6: 1}           #           각각의 맞춘 개수에 순위 할당하기
                                          # ★ 포인트2. 0개 맞은 순위 = 1개 맞은 순위
    
    for l in lottos:                    
        if l in win_nums:
            win += 1
    print('win:', win)
win: 2
이제 lottos 리스트를 하나씩 반복문으로 돌면서,
맞았는지 카운트를 해줍니다.
(win이라는 변수에 저장)

맞춘 번호는 1, 31 입니다.
그래서 win에는 2가 할당되어 있습니다.

 

 

 

 

 

4. 최고 점수와 최저 점수 구하기


def solution(lottos, win_nums):
    # lottos: [44, 1, 0, 0, 31, 25]
    # win_nums: [31, 10, 45, 1, 6, 19]

    zeros = lottos.count(0)               # 리스트에서 0의 개수 세기
    win = 0                               # win 변수 = 맞춘 개수 (0으로 초기화)
    scores = {0: 6, 1: 6, 2: 5, 3: 4,     # ★ 포인트1. 경우의 수가 7개 밖에 없으므로
              4: 3, 5: 2, 6: 1}           #           각각의 맞춘 개수에 순위 할당하기
                                          # ★ 포인트2. 0개 맞은 순위 = 1개 맞은 순위
    
    for l in lottos:                    
        if l in win_nums:
            win += 1
    
    most = win + zeros                    # 맞춘 번호 + 0이 다 맞았다고 가정 -> 최고 순위
    least = win                           # 0이 다 틀렸다고 가정 -> 최저 순위
    print('most:', most)
    print('least:', least)
most: 4
least: 2
이제 최고 점수와 최저 점수를 각각 구해봅니다.
최고 점수는 0으로 센 것들이 다 맞았다고 가정하기 때문에,
그냥 zeros를 더해주면 됩니다. (most)

최저 점수는 0으로 된 것들이 다 틀렸다고 생각하면 됩니다.
그래서 그대로 맞은 것들만 반환해 줍니다. (least)

(이제와서 생각해보니.. 변수 이름을 highest, lowest로 하는게
더 나았을 걸 그랬네요.. 이건 뭐 콩글리시도 아니고..)

 

 

 

 

 

5. 마무리


def solution(lottos, win_nums):
    # lottos: [44, 1, 0, 0, 31, 25]
    # win_nums: [31, 10, 45, 1, 6, 19]

    zeros = lottos.count(0)               # 리스트에서 0의 개수 세기
    win = 0                               # win 변수 = 맞춘 개수 (0으로 초기화)
    scores = {0: 6, 1: 6, 2: 5, 3: 4,     # ★ 포인트1. 경우의 수가 7개 밖에 없으므로
              4: 3, 5: 2, 6: 1}           #           각각의 맞춘 개수에 순위 할당하기
                                          # ★ 포인트2. 0개 맞은 순위 = 1개 맞은 순위
    
    for l in lottos:                    
        if l in win_nums:
            win += 1
    
    most = win + zeros                    # 맞춘 번호 + 0이 다 맞았다고 가정 -> 최고 순위
    least = win                           # 0이 다 틀렸다고 가정 -> 최저 순위
    return [scores[most], scores[least]]  # 딕셔너리를 이용하여 깔끔하게 리턴
이제 아까 만들어둔 딕셔너리의 key로
most와 least를 각각 넣어주면 코드가 완성 됩니다.
오늘의 포인트를 2가지로 정리하겠습니다.


1. count함수를 이용하여 list의 요소 세기
2. 딕셔너리를 이용하여 순위 계산 쉽게 하기


이상으로 마치겠습니다.
반응형
블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

,