728x90
반응형
문제
설계
생각보다 굉장히 쉬운 문제였다.
당연하게도, 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
반응형