ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 10250번] ACM 호텔 (java)
    알고리즘 문제 풀기 2021. 4. 16. 10:38

    링크

    나의 풀이

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    
    public class Main {
        public static void main(String[] args) {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            String s = "";  // 입력받는 문자열
            int T, H, W, N;
            ArrayList<Integer> answer = new ArrayList<>();
            try {
                s = bf.readLine();
            } catch (IOException e) {
                System.out.println(e);
            }
            T = Integer.parseInt(s);    // T 개의 테스트 실시
    
            for (int i = 0; i < T; i++) {
                try {
                    s = bf.readLine();
                } catch (IOException e) {
                    System.out.println(e);
                }
    
                StringTokenizer st = new StringTokenizer(s);
                H = Integer.parseInt(st.nextToken());
                W = Integer.parseInt(st.nextToken());
                N = Integer.parseInt(st.nextToken());
    
                // H W N = 세로 가로 번호
                // n1 = 백의 자리 (N % H)
                // 단, N이 H의 배수일 경우 (나머지가 0일 경우)
                // 가장 꼭대기 층이므로 n1에 H를 대입
                // 그 외에는 나머지로 처리
    
                // n2 = 일의 자리 (N / H)
                // 001호부터 시작하기 때문에 +1을 처리함.
                // 단, 꼭대기 층이 아닐 때에만.
                // (호실을 몫으로 계산하기 때문에, 꼭대기 층은 1이 늘어나버림)
                int n1 = (N % H);
                int n2 = N / H;
                if (n1 == 0) {
                    n1 = H;
                }
                else {
                    n2++;
                }
    
    
                answer.add((n1 * 100) + n2);
            }
    
            for (int a : answer) {
                System.out.println(a);
            }
        }
    }
    

    H와 N을 이용하여 호실을 부여한다. 특히, 호실은 101부터 시작하기 때문에 이와 관련하여 헷갈리지 않게 유의해야한다.
    몫과 나머지를 이용하여 처리했는데, 꼭대기 층의 경우 N / H 와 N % H 가 다른 층들과 다르기 때문에 별도로 처리했다.

    내가 생각한 다른 사람 모범 답안

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    //    public class BJ_10250_ACM호텔 {
    public class Main {
        static StringTokenizer st;
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringBuilder sb = new StringBuilder();
            st = new StringTokenizer(br.readLine());
    
            int T = Integer.parseInt(st.nextToken());
    
            for (int tc = 1; tc <= T; tc++) {
                st = new StringTokenizer(br.readLine());
                int H = Integer.parseInt(st.nextToken());
    //            int W = Integer.parseInt(st.nextToken());
                st.nextToken(); //// W 는 그냥 버린다.
                int N = Integer.parseInt(st.nextToken());
    
                //
                if (N%H == 0) {
                    sb.append(H*100+ N/H).append('\n');
                }else {
                    sb.append((N%H)*100+ ((N/H)+1)).append('\n');
                }
            }//for
    
            System.out.println(sb);
        }
    }

    꼭대기 층일 때 (N % H == 0) 일 때로 더욱 코드가 간략해졌다. W도 사용하지 않기 때문에 저장하지 않고 흘렸다.
    이런 사소한 차이에서 코드가 더욱 간결해지고, 실행 속도도 더 빠른 것 같다.

    실행 결과

    • 내 코드 : 140 ms
    • 모범 답안 : 132 ms
Designed by Tistory.