문제
1부터 6까지 있는 6면 주사위를 던져서 그 눈에 따라 상금을 받게 되는데
1) 세개가 다 같은 눈이면 10000원+n000원(n = 주사위 눈 값)
2) 두개가 같은 눈이면 1000+n00원(n = 주사위 눈 값)
3) 하나가 같은 눈이면 n00원(n = 제일 큰 값)
을 받는다.
reference
https://www.acmicpc.net/board/view/86935
풀이
주사위 눈의 값을 비교해야 하므로, 단순히 int로 입력받으면 안된다.
import sys
dice = list(map(int, sys.stdin.readline().split()))
print(dice)
리스트 갑시다.
전부 같은 눈일 때
if dice[0] == dice[1] == dice[2]:
prize = 10000 + dice[0] * 1000
print(prize)
이 부분은 쉽다. 셋 다 같은 값이기때문에 아무 값이나 가져오면 된다.
전부 다른 눈일 때
else:
prize = max(dice) * 100
print(prize)
여기도 제일 큰 값 찾아서 곱하면 된다.
두 개가 같은 눈일 때
elif dice[0] == dice[1] or dice[1] == dice[2]:
prize = 1000 + dice[1] * 100
print(prize)
리퍼런스도 이 놈 관련이다. 대관절 이게 어찌 된 거냐…
편의상 인덱스(0,1,2)로 표기하자면, 0 = 1, 0 = 2, 1 = 2 세 가지 케이스에 대해 확인을 해야 한다. 그리고 저때에 대비해서 최소한 elif까지 포함해 분기가 네 개는 나와야 한다. (0이 1이나 2랑 같으면 0 곱하면 된다) 근데 리퍼런스에 답을 주신 분께서는 저걸 조건문 하나로 줄여버렸다.
입력값이 1 2 1일 때 리스트를 정렬하면 1 1 2가 되고, 입력값이 2 1 2일 때 리스트를 정렬하면 1 2 2가 된다. 즉, 정렬한 상태에서는 0 = 1 or 1 = 2이고, 이 때 공통분모가 1이니까 정렬한 리스트에서 두번째만 가져오면 된다.
최종 코드
import sys
dice = list(map(int, sys.stdin.readline().split()))
dice = sorted(dice)
prize = 0
if dice[0] == dice[1] == dice[2]:
prize = 10000 + dice[0] * 1000
print(prize)
elif dice[0] == dice[1] or dice[1] == dice[2]:
prize = 1000 + dice[1] * 100
print(prize)
else:
prize = max(dice) * 100
print(prize)
그래서 리스트를 정렬하게 되면 이렇게 된다.
import sys
dice = list(map(int, sys.stdin.readline().split()))
prize = 0
if dice[0] == dice[1] == dice[2]:
prize = 10000 + dice[0] * 1000
print(prize)
elif dice[0] == dice[1] or dice[0] == dice[2]:
prize = 1000 + dice[0] * 100
print(prize)
elif dice[1] == dice[2]:
prize = 1000 + dice[1] * 100
print(prize)
else:
prize = max(dice) * 100
print(prize)
정렬 없는 버전은 이거.
Reply