ACM 호텔 (백준 10250번)

박영준·2023년 5월 22일
0

코딩테스트

목록 보기
136/300


해결법

방법 1

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
 
		int T = in.nextInt();	// 테스트 케이스
 
		for(int i = 0; i < T; i++) {
			
			int H = in.nextInt();		// 층
			int W = in.nextInt(); 		// 한 층의 방 개수 -> 쓸모없는 변수
			int N = in.nextInt();		// 몇 번째 손님
			
			if(N % H == 0) {		// H 층이 배정받는 층 수
				System.out.println((H * 100) + (N / H));
			} else {
				System.out.println(((N % H) * 100) + ((N / H) + 1));
			}
		}
	}
}
  • (H 100) + (N / H) 과 ((N % H) 100) + ((N / H) + 1) --> 층 수 구하기

    • (H 100) 과 (N % H) 100
      • H * 100 : if(N % H == 0) 경우 H 이지만, 호수는 최소 100 자릿수부터 시작하므로 곱하기 100 이 필요
    • (N / H) 과 (N / H) + 1
      • 엘레베이터로부터 떨어진 거리 = N / H 의 '몫'
      • (N / H) + 1 : X 는 0 이 아닌 1 부터 시작하기 때문에 +1 이 필요 (예시 : N = 3, H = 8 일 때는 몫이 0이 돼버리니까)

    위의 두 조건을 합쳐서 만든다.

  • 변수

    • H(층), W(한 층의 방 개수), N(N 번째로 오는 손님) 3개가 주어짐
    • 그러나 W 를 쓸 필요가 없음
      • N 이 H * W 의 값보다 크게 주어지지 않기 때문
      • 즉, 테스트 케이스에서 불가능한 예외 케이스를 애초에 넣지 않기 때문에 필요 X
  • 호수는 YXX 또는 YYXX 에서 볼 수 있듯이 최소 100의 자릿수부터 시작하므로, Y 에 100을 곱하면 됨

방법 2

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
 
		int T = sc.nextInt();
 
		for (int i = 0; i < T; i++) {
			
			int H = in.nextInt();		// 층
			int W = in.nextInt(); 		// 한 층의 방 개수 (방 호수)
			int N = in.nextInt();		// 몇 번째 손님
			
            int x = (N / H) + 1;		// +1 : (N / H)사람이 한 호를 다 채우고, 다음 호로 넘어간 것
            int y = N % H;
            
			if (y == 0) {
            	x = N / H;
                y = H;
			} 
            
			System.out.println(y * 100 + x);
		}
	}
}
  • 1층부터 101호 ~ H01호 먼저 모두 채운뒤, 102호 ~ H02호 채우는 방식으로 간다. (위의 예시 그림을 기준으로 세로부터 채우기)

ACM 호텔 (백준 10250번)


참고: [백준] 10250번 : ACM 호텔 - JAVA [자바]
참고: 백준 10250 java ACM 호텔 [수학1]

profile
개발자로 거듭나기!

0개의 댓글