글 작성자: 취업중인 피터팬
728x90

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

 

10250번: ACM 호텔

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수

www.acmicpc.net

 

문제 설명

 

간단하게 말해 왼쪽 아래서부터 채워지는 호텔에서 N 번째 손님은 몇 호를 쓰게 되는지 묻는 문제입니다.

층수와, N 번째, 한 층에 몇 호가 있는지를 알 수 있습니다.

 

문제풀기

먼저 층수를 구하겠습니다.

층수는 N을 층수로 나눈 나머지입니다. 

먼저 들어온 손님이 왼쪽부터 위로 채워지고 다 채워지지 않는 마지막 끝에는 나머지 수만큼 올라가기 때문에 나머지가 층수가 됩니다.

이때 주의해야 할 점이 있습니다.

*나머지가 0일 경우입니다.

나머지가 0 이게 되면 층수가 0으로 출력됨으로 이것을 방지하기 위해

나머지가 0인 이유는 마지막 층수에 손님이 채워진 것임으로 층수(h)를 층수로 출력해 주면 됩니다.

 

그다음 호수를 구합니다.

호수는 N을 층수로 나눈 값의 +1을 해주면 됩니다.

손님은 1층부터 차례로 채워짐으로 모든 층의 1호가 다 채워지게 되면 2호가 채워지기 시작하고 2호가 다 채워지면 3호가 채워지기 시작함으로 N을 층수로 나눈 값의 +1을 해주면 됩니다.

여기서도 주의해야 할 점이 있습니다.

*나머지가 0일 경우입니다.

나머지가 0일 경우 호수가 나머지로 인해 바뀌지 않을 것임으로 +1을 해주지 않아도 됩니다.

 

위에 두 개가 같은 조건이 있음으로 if 문 하나로 처리할 수 있습니다.

 

정답
import java.util.*;

public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        
        int last = 0;
		int first = 0;
		int testNum = sc.nextInt();
		for(int i=0; i<testNum; i++) {
			int h = sc.nextInt();
			int w = sc.nextInt();
			int n = sc.nextInt();
			
			if(n%h == 0) {
				last = n/h;
				first = h;
			}
			else {
				last = n/h+1;
				first = n%h;
			}
			
			System.out.println((first*100)+last);
		}
    }
    
}

층수는 100을 곱해주고 호수는 덧셈을 해주므로 정확한 호수를 출력할 수 있습니다.