[알고리즘] 주사위 게임

김도연·2024년 1월 3일

알고리즘

목록 보기
10/56

문제

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+21,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그 중 가장 큰 값이 6이므로 6100으로 계산되어 600원을 상금 으로 받게 된다.
N 명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램 을 작성하시오

입력1

3
3 3 6
2 2 2
6 2 5

출력1

12000

[내 코드]

from collections import Counter
N=int(input())
def max_(x):
    max=-2147000000
    for prize in x:
        if prize>max:
            max=prize
    return max

def is_count(x):
    x=set(x)
    if len(x)==1:
        return 3
    elif len(x)==2:
        return 2
    else:
        return 1

def frequency(x):
    counter=Counter(x)
    most_common = counter.most_common(1)[0][0]
    return most_common

def money(x):
    if is_count(x)==3:
        return 10000+frequency(x)*1000
    elif is_count(x)==2:
        return 1000+frequency(x)*100
    elif is_count(x)==1:
        return 100*frequency(x)

a=[]
for i in range(N):
    res=list(map(int,input().split())) 
    a.append(money(res))


print(max_(a))
  1. 2차원 리스트로 받기
  2. 각 행별로 중복된 수 찾기
  3. 중복된 수의 중복횟수 구하기
  4. 2,3바탕으로 상금 계산하기
    +Counter : collections 모듈의 Counter 클래스는 컨테이너안의 데이터를 편리하고 빠르게 개수를 세도록 지원한다.Counter 생성자에 문자열을 인자로 넘기면 각 문자가 문자열에서 몇 번씩 나타나는지를 알려주는 객체가 반환된다.

[해설코드]

 n=int(input())
 for i in range(n):
 	tmp=input().split()
 	tmp.sort()
    a,b,c=map(int,tmp)
    if a==b and b==c:
    	money=10000+a*1000
    elif a==b or a==c:
    	money=1000+(a*100)
    elif b==c:
    	money=1000+(b*100)
    else:
    	money=c*100
    if money>res:
    	res=money
print(res)

0개의 댓글