1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 규칙(1) 같은 눈이 3개가 나오면 10,000원+(같은 눈)1,000원의 상금을 받게 된다. 규칙(2) 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)100원의 상금을 받게 된다. 규칙(3) 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰눈)100원의 상금을 받게 된다. 예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+21,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그 중 가장 큰 값이 6이므로 6100으로 계산되어 600원을 상금으로 받게 된다.
N 명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램을 작성하시오
<내 답안>
n = int(input())
list1 = []
for i in range(n):
a, b, c = map(int, input().split())
m = 0
if a == b == c:
m = 10000+a*1000
elif a == b and a != c:
m = 1000+a*100
elif b == c and b != a:
m = 1000+b*100
elif a == c and a != b:
m = 1000+a*100
else:
maxv = max(a, b, c)
m = maxv*100
list1.append(m)
print(max(list1))
if, elif ..., else 문법에서 조건문이 참이 되면 그 뒤의 나머지 조건문들은 실행이 되지 않는다.
즉, if문이 참이면 elif 에도 참이 걸린다 한들 실행이 되지 않는데 나는 그걸 몰라서 elif에도 참이 걸릴까봐 조건을 명확히 달아놨다..
<모범답안>
n = int(input())
res = 0
for i in range(n):
tmp = input().split() # tmp에 리스트 형태로 들어감
tmp.sort # 오름차순 정렬
a, b, c = map(int, tmp)
if a == b and b == c: # 같은 눈 3개
m = 10000+a*1000
elif a == b or a == c: # 같은 눈 2개
m = 1000+a*100
elif b == c: # 같은 눈 2개
m = 1000+b*100
else: # 모두 다른 눈
m = c*100 # 오름차순 해서 a, b, c 중 c 가 가장 큼
if m > res:
res = m
print(res)
풀이에서는 input을 리스트 형태로 받고 오름차순으로 정렬을 했다.
세 눈이 모두 다를 경우(else문) 가장 큰 눈으로 계산을 해야하기 때문에 오름차순 정렬을 해두는게 깔끔할 것 같다. (나는 내장함수 max를 사용했지만..)
최대/최소 구할 때 res 변수를 사용해서 푸는 방법을 많이 익혀야겠다.