본문 바로가기

알고리즘/python

[python/파이썬] 백준 1223 주사위

반응형

[문제 출처]

https://www.acmicpc.net/problem/1233

 

1233번: 주사위

지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 3개의 주사위가 있다. 그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2

www.acmicpc.net

 

[문제 풀이]

세 개의 주사위 S1, S2, S3가 있고, 각 주사위에 몇까지의 숫자가 적혀있는지 입력으로 주어진다.

만일 

3 2 3이라고 주어지면 

S1 주사위는 1부터 3까지의 숫자가, S2는 1부터 2까지, S3는 1부터 3까지의 숫자가 적혀있다.

 

이 주사위들을 굴려서 나올 수 있는 모든 경우의 수를 따져보고 각 경우의 합을 구했을 때 가장 자주 나오는 합을 구하는 문제이다.

 

따라서 딕셔너리를 이용해서 합의 빈도를 계산하였다.

딕셔너리에는 세 숫자의 합을 키로, 합의 빈도수를 값으로 하여 저장하였다.

 

가장 빈도가 높은 합을 구하는 문제이고 만일 답이 여러 개라면 합이 작은 것을 출력해야 하기에

내림차순으로 정렬한 후에 같거나 큰 경우에 최댓값을 바꾸어 주는 방법으로 답을 찾았다.

 

sorted(sum.items())로 딕셔너리를 정렬하게 되면 키값을 기준으로 오름차순으로 정렬되며,

아래 코드와 같이 reverse=True를 붙여주면 내림차순으로 정렬이 된다.

 

#1223

s1, s2, s3 = map(int, input().split())

sum = dict()
for i in range(1,s1+1):
  for j in range(1,s2+1):
    for k in range(1,s3+1):
      if i+j+k in sum.keys():
        sum[i+j+k] += 1
      else:
        sum[i+j+k] = 1

max_v = 0
result = 0
for k,v in sorted(sum.items(), reverse=True):
  if v >= max_v:
    max_v = v
    result = k

print(result)

 

 

반응형