- 문제
- 풀이
#include <iostream>
using namespace std;
int main()
{
int t = 0,
height = 0,
width = 0,
number = 0,
resultFloor = 0,
resultRoomNumber = 0;
cin >> t;
for (int i = 0; i < t; i++)
{
cin >> height >> width >> number;
resultFloor = number % height;
resultRoomNumber = number / height + 1;
if (resultFloor == 0)
{
resultFloor = height;
resultRoomNumber = number / height;
}
cout << resultFloor * 100 + resultRoomNumber << endl;
}
return 0;
}
- 메모
처음엔 배열을 할당해서 풀어야 하는 건가 생각했는데 풀이 방법은 훨씬 더 간단했다.
층수는 최대 층수 값 이상이 되면 다시 0으로 초기화되기 때문에 나머지 연산을 사용해 입장 순서(number)에서 최대 층수의 나머지를 구하면 된다.
방 번호는 입장 순서(number)에서 층수에 해당하는 height를 나눠준다. 또한 방 번호가 1부터 시작되기 때문에 이 결과에 + 1을 해주면 된다.
추가적으로 단층짜리 건물에 배정해야하는 경우의 수가 존재한다. (ex. 입력값이 1, 1, 1, 1)
이때는 floor 값이 0이 되면서 마지막에 * 100을 하는 결과가 0이 되기 때문에 잘못된 결과가 출력된다.
따라서 이 경우 층수는 1을 그대로 사용하고, 방 번호 역시 + 1 해주지 않고 그대로 사용한다.
'코딩테스트' 카테고리의 다른 글
[백준/1152번/C++] 단어의 개수 (0) | 2024.05.15 |
---|---|
[백준/10818번/C++] 최소, 최대 (0) | 2024.05.14 |
[백준/2884번/C++] 알람시계 (0) | 2024.05.13 |
[백준/2562번/C++] 최댓값 (0) | 2024.05.12 |
[백준/31403번/C++] A + B - C (0) | 2024.05.11 |