서비스 기획자 기록

[백준] 10250번 : ACM 호텔 - Java 본문

백준

[백준] 10250번 : ACM 호텔 - Java

주니5947 2025. 1. 6. 22:35

https://www.acmicpc.net/problem/10250


  • 문제


  • 풀이

- 층과 호수를 따로 구한 뒤 String 타입으로 이어붙이기

import java.util.Scanner;

public class Main {
	public static void main(String[] args)  {
		
		Scanner sc = new Scanner(System.in);
		
		int T = sc.nextInt();
		
		for (int i = 0; i < T; i++) {
			
			int H = sc.nextInt();
			int W = sc.nextInt();
			int N = sc.nextInt();
			int floor;
			int num = 1;
			String S = "";
			
			while(N > H) {
				N = N - H;
				num++;
			}
			
			floor = N;
			
			S += floor;
			if (num < 10) 
				S += "0" + num;
			else
				S += num;
			System.out.println(S);
		}
		
		sc.close();
	}
}

 

정석적인 풀이는 아니고 약간 어거지로 푼?느낌이다.

조건들을 Scanner로 차례대로 입력받고 층과 호수에 해당하는 변수를 따로 선언해준다.

가장 아래층 1호부터 위 층 1호, 그 위 층 1호로 올라가는 우선순위이므로 N - H를 반복한 횟수가 호수가 된다. 단 1부터 시작이므로 num은 1로 초기화한다. (사실 이건 나눗셈 몫...)

그리고 층수는 그 N - H를 반복 실행하고 남은 마지막 N이 된다. (이거도 사실 나눗셈 나머지...)

이후 String 타입에 차례로 넣어준다.

단 호수는 10보다 작을 경우 앞에 0을 붙여야 하므로 if문으로  케이스를 나눠 넣어준다.

 

- 몫과 나머지를 이용해 층과 호수를 한번에 구하기

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
 
		int T = sc.nextInt();	
 
		for (int i = 0; i < T; i++) {
			
			int H = sc.nextInt();
			int W = sc.nextInt(); 	
			int N = sc.nextInt();
			
			if (N % H == 0) {
				System.out.println((H * 100) + (N / H));
 
			} else {
				System.out.println(((N % H) * 100) + ((N / H) + 1));
				
			}
		}
        sc.close();
	}
}

 

몫과 나머지를 이용한 훨씬 깔끔한 풀이다.

마찬가지로 Scanner로 조건을 입력받는다.

위에서 언급했듯이 층수는 N을 H로 나눈 나머지, 호수는 N을 H로 나눈 몫이다.

단 주의할 케이스가 있는데 N이 H로 나누어 떨어지는 경우이다.

호수의 경우 1호 부터 시작이므로 1을 더했는데 이 케이스의 경우 2가 되므로 1을 더하지 않는다.

층수의 경우 나머지가 없으므로 해당 꼭대기 층으로 배정하면 된다.