[알고리즘] 주사위 게임

(문제) 주사위 게임


1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

규칙(1) 같은 눈이 3개가 나오면 10,000원+(같은 눈) * 1,000원의 상금을 받게 된다.

규칙(2) 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈) * 100원의 상금을 받게 된다.

규칙(3) 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈) * 100원의 상금을 받게 된다.

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3 * 100으로 계산되어 1,300원을 받게 된다.

또 3개의 눈이 2, 2, 2로 주어지면 10,000+2 * 1,000 으로 계산되어 12,000원을 받게 된다.

3개의 눈이 6, 2, 5로 주어지면 그 중 가장 큰 값이 6이므로 6 * 100으로 계산되어 600원을 상금으로 받게 된다.

N 명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램을 작성하시오.

입력설명

첫째 줄에는 참여하는 사람 수 N(2<=N<=1,000)이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

출력설명

첫째 줄에 가장 많은 상금을 받은 사람의 상금을 출력한다.

테스트케이스

입력예제 출력예제
3
3 3 6
2 2 2
6 2 5
12000

해결방법

  1. n개 만큼 받은 개수를 반복하여 주사위 숫자를 나타낼 수 있는 리스트 하나를 생성한다.

  2. 반복하는 동안 입력으로 받은 주사위에서 나온 숫자들을 각각 주사위 숫자를 나타낼 수 있는 리스트의 인덱스에 맞춰 + 1 한다.

  3. 만약 주사위 숫자를 나타낼 수 있는 리스트의 가장 큰 수가 3일 경우는 3개 전부다 동일하다는 소리로 해당 조건에 맞는 값을 answer라는 리스트에 대입한다.

  4. 마찬가지로 2개의 경우의수 또한 위의 3번 처럼 작성한다.

  5. 마지막으로 1개일 경우는 가장 큰 것을 찾으니 입력으로 받는 주사위 중에서 가장 큰것을 기준으로 answer라는 리스트에 대입한다.

  6. answer에 대입된 값들 중 가장 큰 값을 출력 한다.


코드

n = int(input())

answer = []

for _ in range(n):
    num_dice = [0] * 7

    dices = list(map(int, input().split()))

    for x in dices:
        num_dice[x] += 1

    # 같은 눈 3개
    if max(num_dice) == 3:
        answer.append(10000 + num_dice.index(3) * 1000)
    elif max(num_dice) == 2:
        answer.append(1000 + num_dice.index(2) * 100)
    else:
        answer.append(max(dices) * 100)

print(max(answer))

댓글남기기