[Algorithm] 주사위 게임

myeonji·2022년 1월 18일
0

Algorithm

목록 보기
4/89

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 변수를 사용해서 푸는 방법을 많이 익혀야겠다.

0개의 댓글