본문 바로가기
백준 문제 풀이 & C++ 공부

백준 10250번 C/C++

by daisy0461 2021. 2. 16.

이번에는 옆에 있는 친구가 이 문제를 풀고 있다길래 같이 풀어본 문제입니다.

 

www.acmicpc.net/problem/10250

 

10250번: ACM 호텔

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

www.acmicpc.net

문제에 들어가자마자 그림이랑 글이랑... 많아서 하기 싫어지는 문제였지만 그냥 했습니다.

나름 문제에 나오는 이유도 귀엽고 글도 이해하기 쉽게 나타나져 있어서 좋았습니다.

 

문제를 간단하게 요약을 해보면 '엘리베이터에 가장 가까이 있는 방에 남아있는 방이 있으면 들어가고 싶다'입니다.

가장 가까이이니까 가장 낮은 층을 더 선호한다는 것이 됩니다.

어쨌든 이러한 사항을 가지고 코딩을 어떻게 할지 생각을 한 결과 처음 떠오른 생각은 그림 탓인지 배열이 떠올랐습니다. 하지만 배열을 가지고 더 이상 어떻게 코딩을 해야할지 떠오르지가 않아서 다른 방법을 떠올리게 되었습니다.

그냥 솔직히 간단한 산수이니까 깊게 생각하지 말고 그냥 코딩으로 풀자가 다음 생각이었습니다.

 

그래서 코딩을 한 결과가 바로 이것입니다.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

//정문으로 걸어서 가장 짧은 거리에 있는 방을 선호한다.
//같은 거리일 경우 층수가 다르지만 같은 방 번호인 경우 아래층을 더 선호한다. 
int main()
{
	int testCase;		//testCase개수
	int h, w;			//h = 층수, w = 층마다 있는 호실 수
	int n;				//n = 몇번째 손님인지 즉 이 손님이 들어갈 호실 수를 구하는 것이다. 
	int room[10000][2];

	scanf("%d", &testCase);
	for (int i = 0; i < testCase; i++) {
		scanf("%d %d %d", &h, &w, &n);
		int height = 1, width = 1;
		while (n != 1) {			
			if (height == h) {
				width++;
				height = 0;
			}
			n--;
			height++;
		}
		room[i][0] = height;
		room[i][1] = width;
	}

	for (int i = 0; i < testCase; i++) {
		if (room[i][1] < 10) {
			printf("%d0%d\n", room[i][0], room[i][1]);
		}
		else {
			printf("%d%d\n", room[i][0], room[i][1]);
		}
	}

	
}

room이라는 배열을 만들어두었다가 그래도 활용을 저렇게나마 해서 기분이 좋았습니다.

코드는 아마 읽어보시면서 손으로 따라가시면 왜 저렇게 짜여져있는지 알 수 있을 것입니다.

 

어려운 코드가 아니고 만들기도 어려운 코드도 아니기 때문에 읽으시는 분들은 한번 풀어보셨으면 좋겠습니다.

'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글

백준 2275번 C/C++  (0) 2021.02.27
백준 2805번 C/C++  (0) 2021.02.24
백준 10989 C/C++  (0) 2021.02.16
백준 2751번 C/C++  (0) 2021.02.15
백준 2292번 C/C++  (0) 2021.02.12