본문 바로가기
백준

[백준] 10250번 - ACM 호텔

by 템닉___ 2024. 3. 22.

문제:

시도 횟수: 2번

처음 생각한 방법: 앞 두자리인 YY와 뒤 두자리인 XX로 나눠서 생각해봄. N은 단순히 몇번째 사람이 아니라, 몇번째 우선순위인지로 생각을 했음. 
YY는 N mod H 한 값이 될 것이다. (왜냐하면 사람들이 가까운 것을 더 우선시 한다는 조건 때문에 사람들은 층수가 높더라도 가까이 있는 호실을 택한다.) 
XX는 N / H + 1 한 값이 될 것이다. 
그러면 이제 숫자는 대강 맞겠지만 방번호 형식에 맞춰주어야 한다.
XX가 한 자리 수 인 경우, 앞에 0을 붙여야 하므로 XX < 10 이면 YY *= 10을 해준다.

생각의 보완: 여러가지 테스트 케이스를 찾던 중, 1 1 1을 입력하면 102가 되는 문제를 발견했다. 
N % H가 0이 될 때, 원하는 값을 주지 않았다. 그래서 조건을 걸어두었다. YY가 0일때 YY가 H가 되면 되는 문제였다.
왜냐하면 최상층에 들어가야할 사람들이 계속 0으로 처리가 되므로, 해당 사람들에 대하여 최상층 값인 H를 넣어주면 된다.
또한 N % H가 0이 될때는 XX에게도 영향을 끼친다. N % H == 0 이후로 몫이 1 늘어나게 되므로 정확히 그 시점에 XX에서 1을 빼준다. 이런 보완을 통해서 모든 테스트케이스가 잘 동작함을 확인하고 제출했다. 

내 코드:

//처음에 시도해서 틀린 코드
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int T;
    cin >> T;
    for(int i = 0; i < T; i++) {
        int H, W, N, YY, XX;
        cin >> H >> W >> N;

        YY = N % H ;
        XX = N / H + 1;
        if(XX < 10)
            YY *= 10;
        cout << YY << XX << "\n";
    }
    return 0;
}
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int T;
    cin >> T;
    for(int i = 0; i < T; i++) {
        int H, W, N, YY, XX;
        cin >> H >> W >> N;

        YY = N % H ;
        if(YY == 0)
            YY = H;
        XX = N / H + 1;
        if(N % H == 0)
            XX--;
        if(XX < 10)
            YY *= 10;
        cout << YY << XX << "\n";
    }
    return 0;
}

모범답안: 

#include <iostream>

using namespace std;

int main() {
    int T;
    cin >> T;
    for (int t = 0; t < T; ++t) {
        int H, W, N;
        cin >> H >> W >> N;
        int floor = N % H;
        if (floor == 0) floor = H;
        int room = (N - 1) / H + 1;
        cout << floor * 100 + room << endl;
    }
    return 0;
}

내 코드의 개선할 점: 수학적으로 계산할 수 있는 부분이 있었는데 그냥 분기를 때려버린 점이 조금 아쉽다. room이 XX부분을 나타내는 것으로 보이는데, 연산을 줄일 수 있는 만큼 줄인 부분이 아름답다. 

알고리즘 분류: 수학, 구현, 사칙연산

난이도: 브론즈 III

복습하면서 참고해본 블로그 목록:  X

'백준' 카테고리의 다른 글

[백준] 2839번 - 설탕배달  (0) 2024.03.29
[백준] 1157번 - 단어 공부  (1) 2024.03.26
[백준] 2920번 - 음계  (1) 2024.03.22
[백준] 2522번 - 별 찍기 - 12  (0) 2024.03.22
[백준] 2445번 - 별 찍기 - 8  (0) 2024.03.22