ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ) ACM 호텔(10250, JAVA)
    알고리즘/백준 2020. 8. 24. 17:00
    반응형

    풀이

     

    1년 전에 못풀어던 문제였다. (문제를 풀기 시작하고 알았다.)

    호텔의 층수, 한 층마다 방의 개수, 손님의 순번이 순차적으로 주어진다.

    호텔에 머무는 손님들은 왜인지 모르겠지만, 가장 적게 걷는 것을 선호한다고 한다.그래서 각 층의 1호방 -> 각 층의 2호방 순으로 순차적으로 배정된다.(101, 201, 301 ... 102, 202호 이런 식으로 방이 배정됨)

     

    풀고나니까 생각보다 간단했다.

     

    우선 배정될 층의 높이는 n % h를 통해 구해줬다. n층에서 몇번째 위치하는지 구한것이다. 주의해야할 점은 n % h == 0인 경우에는, 가장 꼭대기 층에 배정해줘야 한다는 점이다. (배정 층의 순서를 생각해보면, 1층 -> 2층 -> 3층 ... h층인데,  h % h => 0이기 때문)

     

    다음으로는 해당 층에서 몇번째 방을 부여해야 하는지다.이는 n / h 몫을 통해 알 수 있다. 앞에서 몇번째 층까지 채워졌는지 확인하면 방의 순번을 구할 수 있다.여기서도 주의할 점은 floor가 꼭대기 층인 경우를 제외하고는 몫 +1이 방 번호가 된다는 점! 

     

     

    코드

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
        final static String newLine = "\n", ZERO = "0";
    
        public static void main(String[] args) throws IOException {
            solution(new BufferedReader(new InputStreamReader(System.in)));
        }
    
        private static void solution(BufferedReader br) throws IOException {
            int testCase = parseInt(br.readLine());
            StringBuffer sb = new StringBuffer();
    
            for(int i=0; i<testCase; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine());
                int h = parseInt(st.nextToken());
                int w = parseInt(st.nextToken());
                int n = parseInt(st.nextToken());
                sb.append(getRoomNumber(h,w,n)).append(newLine);
            }
            br.close();
            System.out.println(sb.toString());
        }
    
        private static String getRoomNumber(int h, int w, int n) {
            StringBuffer sb = new StringBuffer();
            int floor = n % h;
            if(floor ==0)   floor = h;
    
            int order = n / h;
            if(floor != h)  order++;
    
            sb.append(floor);
            if(order/10 ==0)    sb.append(ZERO);
            sb.append(order);
    
            return sb.toString();
        }
    
        private static int parseInt(String numStr) {
            return Integer.parseInt(numStr);
        }
    }
    반응형

    '알고리즘 > 백준' 카테고리의 다른 글

    BOJ) 욕심쟁이 판다(1937, JAVA)  (0) 2020.08.25
    BOJ) 팰린드롬? (10942, JAVA)  (0) 2020.08.25
    BOJ) 동물원 (1309, JAVA)  (0) 2020.08.24
    BOJ) 바이러스 (2606, JAVA)  (0) 2020.08.24
    BOJ) 이항 계수 2  (0) 2020.08.08

    댓글

Designed by Tistory.