코딩/백준 문제 (브론즈)

[백준/10250/C언어] ACM 호텔 _ 풀이

룻밤 2024. 1. 14. 10:39

 

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

 

10250번: ACM 호텔

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

www.acmicpc.net


풀이

수식 풀이 (본인 풀이)

#include <stdio.h>
int main() {
	int t, h, w, n;
	int room;

	scanf("%d", &t);
	// t만큼 반복
	for (int i = 0; i < t; i++) {
		scanf("%d %d %d", &h, &w, &n);	// 입력
		
		// 꼭대기 층을 원하는 손님일 경우
		if (n % h == 0 && h * w != n)
			room = (h * 100) + (n / h);
		// 마지막 방을 원하는 손님일 경우(h*w)
		else if (n == h * w)
			room = (h * 100) + w;
		// 그외 손님
		else if (n % h > 0 && h * w != n)
			room = (n % h * 100) + (n / h + 1);
		
		printf("%d\n", room);
	}
	return 0;
}

더욱 간결한 풀이

풀고 난 뒤 타유저들의 풀이를 보다 간결한 풀이를 발견했다.

위 1번, 2번 조건문의 공통점은 층을 제외한 방번호 부분이 n/h로 동일하다는 것이다.

(마지막 방일 때 w = n/h)

이를 공통분모로 수식을 재구성하면 밑과 같이 된다.

#include <stdio.h>
int main() {
	int t, h, w, n;
	int f, r;	// 층, 호실

	scanf("%d", &t);
	// t만큼 반복
	for (int i = 0; i < t; i++) {
		scanf("%d %d %d", &h, &w, &n);	// 입력
		f = n % h;
		r = n / h + 1;

		// 꼭대기 층일 때
		if (f == 0) {
			f = h;
			r -= 1;
		}
		printf("%d%02d\n", f,r);
	}
	return 0;
}