💻 coding test

[programmers / python] 주사위 게임 3

Floaty 2026. 6. 16. 12:00

파이썬에 대한 감을 잡기 위해 프로그래머스 코딩 기초 트레이닝을 풀면서 AI를 사용했던 문제들을 적어볼까 한다. Lv.0이고 정답률이 63%라 그리 어려운 문제는 아니겠지만, 메서드와 아직 친하지 않다 보니 헤맸던 문제다. 

 

 

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

`set`으로 중복을 제거하고 길이로 경우의 수를 나누는 건 금방 파악했지만, 길이가 2이거나 3일 때가 문제였다.

 

먼저 길이가 2일 때를 보자면, `[1, 1, 1, 2]`는 3+1개,  `[1, 1, 2, 2]`는 2+2개로 같은 길이지만 다른 케이스이기 때문이다. 여기서 `list.count(x)`로 어느 쪽이 3개인지 판별하면 두 케이스를 구분할 수 있다.

 

길이가 3일 때도 비슷한 맥락인데, 쌍이 되는 숫자를 골라내야 한다. `max(iterable, key=list.count)`를 쓰면 등장 횟수가 가장 많은 값을 바로 뽑을 수 있어서 깔끔하게 해결됐다. 

 

있는 그대로 구현하면 되지만 막상 쉽지 않았다. 

 

def solution(a, b, c, d):
    numbers = [a, b, c, d]
    numbers_set = set(numbers)

    if len(numbers_set) == 1:
        return 1111 * numbers[0]

    elif len(numbers_set) == 2:
        p, q = numbers_set
        # 동일한 숫자 3개가 있는 경우
        if numbers.count(p) == 3 or numbers.count(q) == 3:
            triple = p if numbers.count(p) == 3 else q
            single = q if triple == p else p
            return (10 * triple + single) ** 2
        # 동일한 숫자가 2개씩인 경우
        else:
            return (p + q) * abs(p - q)

    elif len(numbers_set) == 3:
        # 이터러블의 요소 중 가장 많이 등장하는 요소
        pair = max(numbers_set, key=numbers.count)
        others = [x for x in numbers_set if x != pair]
        return others[0] * others[1]

    else:
        return min(numbers)