백준 1233 주사위
문제
지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 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, (1, 1, 3) = 5, ... , (3, 2, 1) = 6, (3, 2, 2) = 7, (3, 2, 3) = 8과 같은 합들을 얻을 수 있다. 이 때, 가장 많이 발생하는 합을 구하는 것이다.
입력
입력 파일의 첫째 줄에 정수 S1, S2, S3가 주어진다.
출력
출력 파일의 첫째 줄에 가장 높은 빈도로 나오는 세 주사위 합을 구하는 것이다. 단 답이 여러개라면 가장 합이 작은 것을 출력한다.
예제 입력 1
3 2 3
예제 출력 1
5
풀이 과정
가장 큰 수끼리 더한 값이 80이므로 크기가 81인 리스트를 하나 선언한다.
나올 수 있는 주사위 눈끼리의 합을 3중 반복문을 이용해 구한다.
그 합을 인덱스로 해서 원소에 1을 누적한다.
리스트에서 제일 큰 값의 인덱스가 정답이 된다.
코드
S1, S2, S3 = map(int, input().split())
dice1 = [i for i in range(1, S1 + 1)]
dice2 = [i for i in range(1, S2 + 1)]
dice3 = [i for i in range(1, S3 + 1)]
sums = [0] * (S1 + S2 + S3 + 1)
for i in dice1:
for j in dice2:
for k in dice3:
sums[i + j + k] += 1
max_value = max(sums)
result = sums.index(max_value)
print(result)
Author And Source
이 문제에 관하여(백준 1233 주사위), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mynote/백준-1233-주사위저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)