-
백준 1233번 주사위알고리즘 문제풀이/Java 2020. 4. 5. 17:08
문제
지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 3개의 주사위가 있다. 그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2 ≤ 20), S3(2 ≤ S3 ≤ 40)개의 면이 있다. (실제로는 주사위가 6개의 면이 있는 것이 정상이지만 특별한 주사위라 생각하자.)
문제는 세 개의 주사위를 동시에 던졌을 때 가장 높은 빈도로 나오는 세 주사위의 합을 구하는 것이다.
입력
입력 파일의 첫째 줄에 정수 S1, S2, S3가 주어진다.
출력
출력 파일의 첫째 줄에 가장 높은 빈도로 나오는 세 주사위 합을 구하는 것이다. 단 답이 여러개라면 가장 합이 작은 것을 출력한다.
예제 입력 1 복사
3 2 3
예제 출력 1 복사
5
해설
완전 탐색에 해당하는 문제이다. 멋있게 푸는 것보단 문제풀이에 초점을 맞춰 그냥 for문 세 개를 돌려 해결했다.
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(System.out)); // 123 12 123 완전 탐색 문제 -> for 문 세 개로 가능하다 String[] nums = br.readLine().split(" "); int s1 = Integer.parseInt(nums[0]); int s2 = Integer.parseInt(nums[1]); int s3 = Integer.parseInt(nums[2]); int[] result = new int[s1 + s2 + s3 + 13]; Arrays.fill(result, 100); for (int i = 1; i <= s1; i++) { for (int j = 1; j <= s2; j++) { for(int k = 1; k <= s3; k++){ result[i + j + k]--; } } } int min = 100; int index = -1; for(int n = 0; n < result.length; n++){ if(min > result[n]){ min = result[n]; index = n; } } System.out.println(index); } }
느낀 점
- 문제를 해결함에 있어서, 단순한 방법에서 시작하는 게 가장 베스트일 때가 있다. 완전 탐색 문제의 경우, 반복 횟수는 정해져 있으니 for문으로 해결하자는 생각은 좋은 생각인 것 같다.
'알고리즘 문제풀이 > Java' 카테고리의 다른 글
백준 1010번 다리 놓기 (0) 2020.04.06 백준 1152번 단어의 개수 (0) 2020.04.05 백준 1076번 저항 (0) 2020.04.05 [프로그래머스 Level 1] 문자열 내 마음대로 정렬하기 (0) 2020.04.03 [프로그래머스 Level 1] 실패율 (0) 2020.04.03