백준/단계별

백준 10250 C#) ACM 호텔

alpacadabra 2022. 5. 5. 02:00

문제 자체는 간단한데 지문이 상당히 길어 헷갈리기 쉽다.

 

StreamWriter sw = new (new BufferedStream(Console.OpenStandardOutput()));

int t = int.Parse(Console.ReadLine()), y, x;
int[] hwn;

for (; t > 0; t--)
{
    hwn = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
    
    y = hwn[2] % hwn[0];
    x = hwn[2] / hwn[0];
    
    if (y == 0)
        y = hwn[0];
    else
        x += 1;
    
    sw.WriteLine(y * 100 + x);
}

sw.Close();

 

문제를 읽어보면 "102 호보다 2101 호를 더 선호한다" 라고 적혀있는데 이는 사진에서 방이 배정되는 방향이 오른쪽이 아닌 위쪽임을 의미한다.

위쪽으로 계속 배정되다 한 열이 모두 채워지면 다음 열로 넘어가는 식이다.

다르게 말하면 1호실이 모두 채워져야 2호실을 배정할 수 있다는 뜻이다.

 

위 과정이 머릿속에서 그려진다면 방 번호는 쉽게 구할 수 있다.

층수는 나머지 연산을 사용하면 된다. 단 나머지가 0이 될 때(꼭대기 층일 때)는 예외 처리를 해야 한다.

호수는 몫과 관련이 있는데, 정확히는 몫을 올림한 수와 같다. Math.Ceiling 메소드를 사용해도 되지만 정수 간의 연산으로도 충분히 표현할 수 있다.

 

그리고, 풀고 나서 깨달은 거지만 어째서인지 w를 전혀 사용하지 않고 있다...

아무래도 "배정이 불가능할 때"를 이 문제에서는 고려하지 않는 모양이다.