[백준/Python] 2476 - 주사위 게임

orangesnail·2025년 3월 1일

백준

목록 보기
44/169

https://www.acmicpc.net/problem/2476


🗑️ 내가 짠 코드

그냥 의식의 흐름대로

  1. 입력받고
  2. 몇 개의 눈이 같은지 비교하고 각 케이스마다 조건에 맞게 돈 계산하고
  3. 이전 단계의 max 값과 비교해 더 크면 업데이트, 크지 않으면 업데이트 x

이렇게 짰다.

n = int(input())
maxMoney = 0

for _ in range(n):
    eye1, eye2, eye3 = map(int, input().split())
    money = 0
    
    if eye1 == eye2 and eye2 == eye3:
        money = 10000 + eye1 * 1000
    elif eye1 != eye2 and eye2 != eye3 and eye1 != eye3:
        money = max(eye1, eye2, eye3) * 100
    else:
        if eye1 == eye2:
            money = 1000 + eye1 * 100
        elif eye1 == eye3:
            money = 1000 + eye1 * 100
        else:
            money = 1000 + eye2 * 100
    
    if money > maxMoney:
        maxMoney = money

print(maxMoney)

그랬더니 정말 길고 복잡하고 비효율적인 코드를 짜버렸다. 어쨌든 굴러가긴 하는데.......


✨ 개선된 코드

풀이 참고 1😇
풀이 참고 2😇

for문 안의 내용이 내 코드에 비해 훨씬 간단했다.
어떻게 그렇게 할 수 있었는지 살펴봤는데, 나는 세 수가 모두 같은 경우 -> 세 수가 모두 다른 경우 -> 두 수만 같은 경우의 순서로 조건을 나눴는데, 링크의 풀이에서는 세 수가 모두 같은 경우 -> 두 수만 같은 경우 -> 세 수가 모두 다른 경우로 조건을 나눴다. 이렇게 하면 세 수가 모두 다른 경우의 조건을 굳이 명시할 필요가 없어서 코드가 훨씬 더 간단해진다.

n = int(input())
winner = 0

for _ in range(n):
    x, y, z = map(int, input().split())

    if x == y and y == z:
        money = 10000 + x * 1000
    elif x == y or x == z:
        money = 1000 + x * 100
    elif y == z:    
        money = 1000 + y * 100
    else:
        money = max(x, y, z) * 100

    if money > winner: 
        winner = money

print(winner)
profile
초보입니다. 피드백 환영합니다 😗

0개의 댓글