프로그래밍/백준알고리즘

백준 알고리즘 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);
		}
	}
}