📝 문제
💡 지민이는 주사위 던지기 게임을 좋아하여 어느 날 동호를 설득하여 주사위 던지기 게임을 하자고 하였다.
총 3개의 주사위가 있다.
그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2 ≤ 20), S3(2 ≤ S3 ≤ 40)개의 면이 있다.
(실제로는 주사위가 6개의 면이 있는 것이 정상이지만 특별한 주사위라 생각하자.)
문제는 세 개의 주사위를 동시에 던졌을 때 가장 높은 빈도로 나오는 세 주사위의 합을 구하는 것이다.
예를 들어, S1 = 3, S2 = 2, S3 = 3으로 주어질 때,
주사위1은 S1(3)개의 면이 있으므로 1, 2, 3의 눈을 가지고,
주사위2는 S2(2)개의 면이 있으므로 1, 2의 눈을 가지며,
주사위3은 S3(3)개의 면이 있으므로 1, 2, 3의 눈을 가진다.
이 때, 이 3개의 주사위를 던져서 눈의 합을 구하면,
(1, 1, 1) = 3, (1, 1, 2) = 4, ... , (3, 2, 1) = 6, (3, 2, 2) = 7, (3, 2, 3) = 8과 같은 합들을 얻을 수 있다.
이 때, 가장 많이 발생하는 합을 구하는 것이다.
⚙️ 입력 : 입력 파일의 첫째 줄에 정수 S1, S2, S3가 주어진다.
⚙️ 출력 : 출력 파일의 첫째 줄에 가장 높은 빈도로 나오는 세 주사위 합을 구하는 것이다.
단 답이 여러개라면 가장 합이 작은 것을 출력한다.
1233번: 주사위
지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 3개의 주사위가 있다. 그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2
www.acmicpc.net
✅ 풀이
a,b,c = map(int,input().split())
dict = {}
for i in range(a):
for j in range(b):
for k in range(c):
key = (i+1)+(j+1)+(k+1)
if dict.get(key):
dict[key] += 1
else:
dict[key] = 1
answer = []
[answer.append(k) for k, v in dict.items() if v == max(dict.values())]
print(min(answer))
💡 3중 for문을 통해 주사위의 모든 합을 구했다.
만약 딕셔너리에 처음 들어오는 합이라면 해당 키에 1을 할당해주었고,
같은 합이 나왔을 경우엔 해당 키에 1을 더해서 카운팅 해주었다.
가장 많이 등장하는 합 중 여러개가 있다면, 최소인 합을 구해야 하므로
카운트의 최댓값을 가지는 키 중 가장 작은 키를 뽑아내도록 처리해주었다.