21.06.24 기록

1 분 소요

  • 백준 알고리즘 10250 풀이

    • 오답 - 생각해본 로직
      각 층을 다 채우고 다음 층을 채우는 것이 아닌, 각 층의 낮은 호실부터 채운다.
      (1)N이 H보다 같거나 작은 경우 → N번째 층의 1호실
      (2)N이 H보다 큰 경우 → (N%H)층의 (N/H+1)호실
      (3)마지막 방인 경우(N%H == 0) → H층의 W호실
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class B10250 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st;
            StringBuilder sb = new StringBuilder();
    
            int testCase = Integer.parseInt(br.readLine());
            for(int i = 0; i < testCase; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                int H = Integer.parseInt(st.nextToken());
                int W = Integer.parseInt(st.nextToken());
                int N = Integer.parseInt(st.nextToken());
    
                int share = N/H;
                int remainder = N%H;
    
                //1. 마지막 방인 경우
                if(remainder == 0) {
                    sb.append(H);
                    if(W < 10) { sb.append("0"); }
                    sb.append(W);
                }
                //2. 1호실 초과인 경우
                else if(H < N) {
                    sb.append(remainder);
                    if(share < 10) { sb.append("0"); }
                    sb.append(share+1);
                }
                //3. 1호실인 경우
                else { sb.append(N + "01"); }
                sb.append("\n");
            }
    
            System.out.println(sb);
        }
    }
    
    


    • 해설(메모리 14.2MB, 시간 132ms로 통과)
      로직은 비슷하게 생각해서 이해하는 데 크게 어렵지 않았다. 다만, 출력할 때 값을 너무 1차원적으로만 생각한 것 같다.
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class B10250 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st;
            StringBuilder sb = new StringBuilder();
    
            int testCase = Integer.parseInt(br.readLine());
            for(int i = 0; i < testCase; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                int H = Integer.parseInt(st.nextToken());
                st.nextToken();
                int N = Integer.parseInt(st.nextToken());
    
                int share = N/H;
                int remainder = N%H;
    
                if(remainder == 0) { sb.append(H*100 + share); }
                else { sb.append(remainder*100 + (share+1)); }
    
                sb.append("\n");
            }
            System.out.println(sb);
        }
    }
    
    


카테고리:

업데이트: