백준 링크 : https://www.acmicpc.net/problem/10250

문제 개요

image.png

n번째 손님이 오면 어떤방에 배정할지를 결정하는 문제이다..

n번째 손님은 왼쪽아래부터 방을 배정받으며, 예를들어, 첫 번째 손님은 101호, 두 번째 손님은 201호, 세 번째 손님은 301호에 배정하는식으로 이어진다. 01호 방이 꽉차면 02호방에 배정받게 되는데, 예를들어 일곱번째 손님은 102호에 배정받게 된다.

아이디어


주의사항


코드


// 아래의 코드는 dev c++환경에서 동작됩니다.
// visual studio에서는 bit/stdc++.h가 기본적으로 없기 때문에
// 정삭적인 작동이 되지 않을 수 있습니다.

#include <bits/stdc++.h>
using namespace std;

int t, h, w, n;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	cin >> t;
	while(t--)
	{
		cin >> h >> w >> n;
		if(n % h == 0)
		{	
			cout <<  h * 100 + n / h << "\\n";
		}
		else
		{
			cout << (n % h) * 100 + (n / h) + 1 << "\\n";
		}
	}

    return 0;
}

후기


나머지와 나누기를 잘 활용한다면 그렇게 어렵지는 않은 문제이다. 그럼에도 불구하고 정답률이 2024년 기준으로 33%인 것을 볼 수 있는데, 대부분이 나누어 떨어졌을 때의 예외처리를 예상하지 못했기 때문인 것 같다.

이 문제 말고도 나머지 연산을 활용하는 문제 중에 정답률이 낮은 문제들을 목격할 수 있는었데, 아마도 나누어 떨어졌을 때의 예외처리를 하지 않았기 때문이라 추측된다.

앞으로도 나머지 연산을 활용할 때는 항상 나누어 떨어졌을 때도 예상된 값이 나오는지 잘 생각해야겠다.