-
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