문제
문제에 설명이 길지만, 자세히 보면 간단한 문제이다.
키포인트
-
손님이 오른쪽으로 한 칸씩 이동할 때마다 거리가 1씩 늘어난다.
-
엘레베이터를 손님의 출발 시작 기준으로 잡기 때문에 101, 201, 301호 모두 다 거리는 1이다.
-
손님은 이동거리가 같으면 아래층을 더 선호한다고 한다.
요약하자면, 입력 데이터에서 높이가 3으로 주어졌을 때, 손님은 101, 201, 301순으로 찰 것이고 h의 높이만큼 손님이 가득차게 되면 이동거리가 1증가하고, 높이가 가장 낮은 곳으로 (102호)의 호텔방이 배정될 것이다.
입력
첫째줄 : 테스트 케이스 개수
둘째줄부터 : 각 테스트 데이터에 대한 정보
각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).
출력
N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.
코드
#include <iostream>
using namespace std;
int main()
{
int loop;
//h: 호텔의 높이 w: 호텔의 넓이, n: 몇 번째 손님인지 나타냄.
int h, w, n;
//x는 호텔 가로 너비의 호수를 뜻함. y는 층의 위치를 뜻함. => y=100, x=1 => x+y = 101호
int x_location = 1;
int y_location = 100;
int result = 0;
cin >> loop;
for (int i = 0; i < loop; i++) {
cin >> h >> w >> n;
//
for (int j = 0; j < n-1; j++) {
//건물의 층 호수(y_location)가 건물의 총 높이보다 높아지면 100으로 초기화
if ((h * 100) == y_location) {
y_location = 100;
if (w > x_location) {
x_location += 1;
}
}
else y_location += 100;
}
result = y_location + x_location;
printf("%d\n", result);
result = 0;
x_location = 1;
y_location = 100;
}
return 0;
}
예제 입력 6 12 10을 예시로 들면, 코드에서 시작지점은 무조건 101호로 잡았으니 n번(10번) 반복하는 것이 아닌 9번만 반복하면 되기에 n-1번 동안 반복문을 수행한다.
'역시 내 문제해결 알고리즘은 잘못됐다 > 구현' 카테고리의 다른 글
백준 2108번 통계학 [C/C++] (0) | 2021.02.15 |
---|