카테고리 없음

[C++] 백준 온라인 저지 10250

Emil :) 2020. 9. 24. 13:21
728x90
반응형

문제


www.acmicpc.net/problem/10250

 

10250번: ACM 호텔

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

www.acmicpc.net

 

설계


생각보다 굉장히 쉬운 문제였다.

당연하게도, for문이나 while문 돌려서 풀면 틀리는 문제다. (시간 초과)
나는 이 문제를 H따로, W따로 구해서 출력할 때 둘이 붙이는 방식으로 풀려고 했다.
먼저 주어지는 H, W, N과 정답으로 사용될 변수인 answerH, answerW를 변수로 둔다고 가정하자.

그렇다면 조건은 크게 2가지로 볼 수있다.

1. 고객이 들어오면, 무조건 H먼저 채워진다.
2. 꼭대기 층에 가면 다음 고객은 1층의 N / H + 1호에 들어간다.

int h, w, n;
cin >> h >> w >> n;
int answerH, answerW;
answerH = n % h;
answerW = n / h + 1;

H를 구하는건 사실상 쉽다. 그냥 N % H 가 고객이 들어가야 할 answerH다.
왜? H층까지 다 찼을때는 굳이 고려하지 않아도 되니까! 나머지 값이 즉 고객이 들어가야 될 층수가 된다.

그런데, 예외가 발생한다. N % H 가 0일때, 즉 꼭대기 층에 배정받게 될 고객이다.
이럴 경우엔 꼭대기층임에도 불구하고 나머지가 0이라서 첫자리가 0으로 시작할것이다.
이때는 예외처리를 해주도록 하자.
그리고 꼭대기층일때 W를 증가하지 않으니, 그냥 N/H값을 answerW로 놔준다.

if(answerH == 0){
	answerH = h;
	answerW = n/h;
}

이렇게하면 끝

이 아니라, W가 10 이하일때는 01, 02 이런식으로 표기되어야 한다.
예) 4층의 2번째 객실은 402호로, 4층의 12번째 객실은 412호로 표기되는 것처럼.

이부분은 다음과 같이 조건을 걸어주면 끝이다.
10보다 작으면 그냥 앞에 0붙여주자.

if(answerW < 10)
	cout << answerH << '0' << answerW << '\n';
else
	cout << answerH << answerW << '\n';

코드


#include <iostream>

using namespace std;

int main(void){
	int t;
	cin >> t;
	for(int i = 0; i < t; i++){
		int h, w, n;
		cin >> h >> w >> n;
		int answerH, answerW;
		answerH = n % h;
		answerW = n / h + 1;
		if(answerH == 0){
			answerH = h;
			answerW = n/h;
		}
		if(answerW < 10)
			cout << answerH << '0' << answerW << '\n';
		else
			cout << answerH << answerW << '\n';
	}
	return 0;
}

 

결과


역시 알고리즘은 잘풀리면 참 재밌다 ㅋㅋ루삥뽕

 

구독 및 하트는 정보 포스팅 제작에 큰 힘이됩니다♡

728x90
반응형