jyamethyst21 님의 블로그

백준 2476번- '주사위 게임' (PYTHON 풀이) 본문

CODING 💻

백준 2476번- '주사위 게임' (PYTHON 풀이)

jyamethyst21 2026. 1. 13. 09:24

문제:

 

N번 숫자를 받고 해당하는 수만큼 주사위 3개를 돌릴건데 그 수 중 3개가 모두 겹치는 경우, 2개만 겹치는 경우, 모두 다른 눈이 나오는 경우를 확인해서 각 상황에 맞는 공식에 따라 상금을 계산하여 가장 큰 수인 사람의 금액을 출력하면 된다.

 

풀이:

N = int(input())
result = []

for i in range(N):
    a,b,c = map(int,input().split())
    li = [a,b,c]
    if a == b == c:
        result.append(10000+a*1000)
    elif a == b:
        result.append(1000+a*100)
    elif b == c:
        result.append(1000+b*100)
    elif a == c:
        result.append(1000+c*100)
    elif a != b and b != c and a != c:
        result.append(max(li)*100)
print(max(result))

처음에 바로 생각났던 건 if문을 활용해서 주사위가 3개뿐이니 각 변수를 비교하면서 진행하면 된다고 생각했다. 어려운 코드 부분은 없어서 자세한 설명은 생략하겠다.

 

N = int(input())
result = []

for _ in range(N):
    dice = list(map(int, input().split()))
    s = set(dice)

    if len(s) == 1:
        result.append(10000 + dice[0] * 1000)

    elif len(s) == 2: 
        for x in s:
            if dice.count(x) == 2:
                result.append(1000 + x * 100)
                break
    else: 
        result.append(max(dice) * 100)

print(max(result))

그런데 if문을 활용한 경우에는 만약 주사위 수가 많아질 때 변수를 추가해서 생성해야 하므로 비효율적이라고 생각했다. 그래서 다른 방법이 없을까 고민해보았는데 두번째 코드 처럼 set을 활용하면 된다!

set은 중복 데이터를 없애주므로 모든 입력을 받은 뒤 set의 값이 1개이면 모두 겹치는 경우가 된다. 2개인 경우는 3개 중 2개만 겹치는 경우가 될 것이다. 단, 이때 그냥 max(s)를 쓰게 되면 한번만 나온 수가 클 경우엔 문제가 발생할 수 있기 때문에 dice 리스트를 카운트해서 2번 나온 x에 대해서 수식을 계산해주어야 한다.

여기까지하면 result에는 각 수식을 통해 계산된 상금이 계산될 것이므로, max를 활용해서 값을 출력하면 된다!