프로그래밍/백준알고리즘
백준 알고리즘 10250번 문제 풀이 - ACM 호텔
밍구몬
2019. 11. 29. 15:05
이 문제는 H(호텔의 층 수), W(각 층의 방 수), N(몇 번째 손님)를 입력받아 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 출력하는 문제이다.
손님은 엘레베이터 타는것을 신경쓰지 않기 때문에 102호 보다 601호를 선호한다고 합니다.
이 문제는 규칙을 찾을것도 없이 낮은 층 1호부터 순서대로 사람을 채워주면 되는 간단한 문제입니다.
(문제를 풀어보니 W는 쓸곳이 없었습니다...)
우선 N번째 손님이 묵을 층을 구해줘야 합니다.
층 수는 N / H 가 0이 0이 아닐 경우 N / H 를 한 나머지가 층 수가 됩니다. ( 1호 부터 채우기 때문에 N % H = 손님이 묵을 층 수)
int h = ( N % H == 0) ? H : N % H;
그 다음 손님이 묵을 호는 N%H == 0 이 아니라면 N / H + 1, 0이라면 N / H 가 됩니다.
( N%H == 0일 경우 층의 마지막이기 때문에 N / H, 0이 아닐 경우 1호 부터 시작하기 때문에 + 1을 해주는 것입니다.)
int w = ( N % H == 0) ? N/H : N/H+1;
전체 소스
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int T = s.nextInt();
for(int i=0;i<T;i++) {
int H = s.nextInt(); // 호텔의 층 수
int W = s.nextInt(); // 각 층의 방 수
int N = s.nextInt(); // 몇 번째 손님
int h = (N%H == 0) ? H : N%H;
int w = (N%H == 0) ? N/H : N/H+1;
if (w/10 == 0) System.out.println(h+"0"+w);
else System.out.println(h+""+w);
}
}
}