백준 | 주사위 세개

jeonghens·2024년 8월 5일

알고리즘: BOJ

목록 보기
70/125

백준 주사위 세개 문제 풀이이다.


1부터 6까지의 눈을 가진 주사위 3개를 던져서 아래의 규칙에 따라 상금을 받는다고 한다.

[1] 같은 눈이 3개가 나오면 '10,000원 + (같은 눈) × 1,000원'의 상금을 받게 된다.
[2] 같은 눈이 2개만 나오는 경우에는 '1,000원 + (같은 눈) × 100원'의 상금을 받게 된다.
[3] 모두 다른 눈이 나오는 경우에는 '(가장 큰 눈) × 100원'의 상금을 받게 된다.

3개의 주사위로 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성해야 한다.


3개의 눈을 리스트에 담아서 오름차순으로 정렬한 뒤, 규칙을 아래의 순서로 분기 처리했다.

[1] 3개의 눈이 모두 같은 경우

[2] 2개의 눈만 같은 경우
[1]에서 3개의 눈이 모두 같은 경우는 이미 처리되므로, 여기서부터는 3개의 눈이 모두 같을 수 없다.

따라서 아래의 2가지 경우로 분기 처리를 해도 중복되지 않는다.

1) 가장 작은 수와 가운데 수가 같은 경우
2) 가운데 수와 가장 큰 수가 같은 경우

[3] 모든 눈이 서로 다른 경우
3개의 눈이 모두 같은 경우, 2개의 눈이 같은 경우가 이미 처리되므로 남은 경우는 3개의 눈이 모두 다른 경우이다.


코드(정답)는 다음과 같다.

import sys


nums = list(map(int, sys.stdin.readline().split()))
nums.sort()

if nums[0] == nums[1] == nums[2]:
    print(10000 + nums[0] * 1000)
elif nums[0] == nums[1]:
    print(1000 + nums[0] * 100)
elif nums[1] == nums[2]:
    print(1000 + nums[1] * 100)
else:
    print(nums[2] * 100)


3개의 눈의 최댓값은 3개의 눈이 모두 다른 경우에만 필요하므로 정렬 없이 max()를 사용해도 된다.

코드는 다음과 같다.

import sys


x, y, z = map(int, sys.stdin.readline().split())

if x == y == z:
    print(10000 + x * 1000)
elif x == y:
    print(1000 + x * 100)
elif x == z:
    print(1000 + x * 100)
elif y == z:
    print(1000 + y * 100)
else:
    print(max(x, y, z) * 100)
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글