ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 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문으로 해결하자는 생각은 좋은 생각인 것 같다.

     

     

    댓글

Designed by Tistory.