https://www.acmicpc.net/problem/2484
N명이 참가했을 때, 가장 많은 상금을 받은 사람의 상금을 출력딕셔너리를 활용해서 문제를 풀었습니다.
for _ in range(n):
dice = list(map(int,input().split()))
dic = dict()
for d in dice:
dic[d] = dic.get(d,0) + 1
dic = sorted(dic.items(), key=lambda x: (x[1], x[0]), reverse=True)
주사위를 굴린 횟수를 리스트로 저장하고 이를 딕셔너리에 횟수와 함께 저장을 해주었습니다.
후에, 이를 나타난 횟수에 따라 정렬하고 발견 횟수가 같을 경우엔 숫자 내림차순으로 정리해주었습니다.
reward = 0
if len(dic) == 1:
reward = 50000 + dic[0][0] * 5000
elif len(dic) == 2:
if dic[0][1] == 3:
reward = 10000 + dic[0][0] * 1000
else:
reward = 2000 + dic[0][0] * 500 + dic[1][0] * 500
elif len(dic) == 3:
reward = 1000 + dic[0][0] * 100
else:
reward = dic[0][0] * 100
딕셔너리를 순회하여 길이에 따라 결과를 다르게 설정
dic의 길이가 1인 경우: "모두 같은 숫자"dic의 길이가 2인 경우: "3개의 숫자가 같은 경우"(1, 1, 1, 2) or "2개의 숫자가 같은 경우 2쌍"(1, 1, 2, 2) 존재dic의 길이가 3인 경우: "2개의 숫자만 같은 경우"(1, 1, 2, 3) 존재 answer = max(answer, reward)
print(answer)
참가자 중 최댓값만 출력하면 되므로, 반복문 마지막에 항상 최댓값 비교하고 마지막으로 출력해주면 끝 😊
import sys
input = sys.stdin.readline
n = int(input())
answer = 0
for _ in range(n):
dice = list(map(int,input().split()))
dic = dict()
for d in dice:
dic[d] = dic.get(d,0) + 1
dic = sorted(dic.items(), key=lambda x: (x[1], x[0]), reverse=True)
reward = 0
if len(dic) == 1:
reward = 50000 + dic[0][0] * 5000
elif len(dic) == 2:
if dic[0][1] == 3:
reward = 10000 + dic[0][0] * 1000
else:
reward = 2000 + dic[0][0] * 500 + dic[1][0] * 500
elif len(dic) == 3:
reward = 1000 + dic[0][0] * 100
else:
reward = dic[0][0] * 100
answer = max(answer, reward)
print(answer)