[BOJ] 2484 - 주사위 네개
사용 언어: Python3
문제
코드
내 풀이
# 같은 눈 4개 - 50000 + 눈*5000
# 같은 눈 3개 - 10000 + 눈*1000
# 같은 눈 2개 2쌍 - 2000 + 눈*500 + 다른 눈*500
# 같은 눈 2개 1쌍 - 1000 + 눈*100
# 모두 다른 눈 - 가장 큰 눈*100
from collections import Counter
def most_freq(numbers):
return max(numbers, key=numbers.count)
def process(price, i):
numbers = list(map(int, input().split()))
countNums = Counter(numbers)
if len(set(numbers)) == 1:
price[i] = 50000 + numbers[0] * 5000
elif len(set(numbers)) == 2 and countNums.most_common(n=1)[0][1] == 3:
price[i] = 10000 + countNums.most_common(n=1)[0][0] * 1000
elif len(set(numbers)) == 2 and countNums.most_common(n=1)[0][1] == 2:
price[i] = 2000 + countNums.most_common(n=2)[0][0] * 500 + countNums.most_common(n=2)[1][0] * 500
elif len(set(numbers)) == 3:
price[i] = 1000 + most_freq(numbers) * 100
else:
price[i] = max(numbers) * 100
# input
N = int(input())
price = [0 for _ in range(N)]
for i in range(N):
process(price, i)
# output
print(max(price))
collections.Counter
를 사용했다.
다른 풀이
def process():
numbers = sorted(list(map(int, input().split()))) # 오름차순 정렬
if len(set(numbers)) == 1: # 같은 눈 4개
return 50000 + numbers[0] * 5000
if len(set(numbers)) == 2:
if numbers[1] == numbers[2]: # 같은 눈 3개
return 10000 + numbers[1] * 1000
else: # 같은 눈 2개씩 두 쌍
return 2000 + numbers[1] * 500 + numbers[2] * 500
for i in range(3):
if numbers[i] == numbers[i+1]: # 같은 눈 2개
return 1000 + numbers[i] * 100
return numbers[-1] * 100 # 모두 다른 눈
N = int(input())
# process() 값 중 최대값 출력
print(max(process() for _ in range(N)))
같은 눈 3개
와같은 눈 2개씩 2쌍
을 어떻게 구분할지가 핵심이다.- 나는
collections.Counter
를 썼지만 여기서는 오름차순 정렬 한 뒤에numbers[1]
과numbers[2]
의 값을 비교했다. numbers[1] == numbers[2]
라면 같은 눈 3개인 경우이고,numbers[1] != numbers[2]
라면 같은 눈 2개씩 두 쌍인 경우이다.
- 나는
- 답을 출력할 때
max(process() for _ in range(N))
와 같은 방식으로process()
의 반환값을 따로 저장해두지 않고도 바로 max 값을 구할 수 있다.
💛 개인 공부 기록용 블로그입니다. 👻