백준 주사위 세개 문제 풀이이다.
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)