정신과 시간의 방
카테고리
작성일
2024. 5. 14. 21:28
작성자
risehyun
  • 문제

 

  • 풀이
#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