반응형
주사위 문제 해결
지민이와 동호가 사용하는 특별한 주사위 세 개를 던졌을 때, 나오는 눈의 합 중 가장 빈도가 높은 합을 찾는 문제입니다. 각 주사위는 다른 개수의 면을 가질 수 있습니다.
문제 조건
- 시간 제한: 2초
- 메모리 제한: 128MB
- 제출: 7100
- 정답: 3868
- 맞힌 사람: 3464
- 정답 비율: 55.380%
- 문제링크
1233번: 주사위
지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 3개의 주사위가 있다. 그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2
www.acmicpc.net
입력
- 첫째 줄에 각 주사위의 면의 수 S1, S2, S3가 주어집니다. (2 ≤ S1 ≤ 20, 2 ≤ S2 ≤ 20, 2 ≤ S3 ≤ 40)
출력
- 가장 높은 빈도로 나오는 세 주사위의 합을 출력합니다. 답이 여러 개인 경우 가장 작은 합을 출력합니다.
주요 개념
- 빈도 계산: 각 주사위의 가능한 눈의 합을 계산하여 가장 자주 나오는 합을 찾습니다.
- 중첩 루프 사용: 세 주사위의 가능한 모든 눈의 조합을 생성하기 위해 중첩된 반복문을 사용합니다.
코드 설명
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int S1 = sc.nextInt(); // 첫 번째 주사위의 면의 수
int S2 = sc.nextInt(); // 두 번째 주사위의 면의 수
int S3 = sc.nextInt(); // 세 번째 주사위의 면의 수
int maxNumber = S1 + S2 + S3; // 가능한 최대 합
int[] count = new int[maxNumber + 1]; // 각 합의 빈도를 저장할 배열
// 모든 주사위의 눈의 조합에 대해 합의 빈도 계산
for (int i = 1; i <= S1; i++)
for (int j = 1; j <= S2; j++)
for (int k = 1; k <= S3; k++)
count[i + j + k]++;
int ans = 1; // 가장 높은 빈도의 합
int ansCount = count[1]; // 가장 높은 빈도
// 가장 빈번한 합 찾기
for (int i = 2; i <= maxNumber; i++)
if (count[i] > ansCount) {
ans = i;
ansCount = count[i];
}
System.out.println(ans); // 결과 출력
}
}
반응형
'알고리즘 > 완전 탐색' 카테고리의 다른 글
[백준] 분해합 (0) | 2024.04.18 |
---|---|
[백준] 진법 변환 (0) | 2024.04.16 |
[백준] ALPS식 투표 (0) | 2024.04.16 |
[백준] 행운의 바퀴 (0) | 2024.04.11 |
[백준] 판화 (0) | 2024.04.08 |