알고리즘/백준
BOJ) ACM 호텔(10250, JAVA)
Zin0_0
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);
}
}
반응형