Algorithm

[백준] 아~파트 아파트 31797번 (c++)

salmon16 2025. 1. 2. 13:55

출처 : https://www.acmicpc.net/problem/31797

 

풀이 방법

이 문제를 풀며 실제 아파트 게임과 다른 점은 중간에 빈 층도 있다는 것이다.

이 부분을 고려하지 못해 문제를 틀렸다.

증간에 빈 층을 처리해 주기 위해 hand [i] == 0인 경우 층수를 update 하지 않았다.

 

또한 참가자의 손 수는 M*2이므로 M*2보다 큰 경우 N % (M*2)를 해주면 된다. 만약 해당 값이 0이라면 마지막 층인 M*2로 구해주면 된다.

 

#include <iostream>

using namespace std;

int n, m;

int hand[10001];

int main() {
    cin >> n >> m; // n = 층수, m = 참가자 수    
    int idx = n % (m * 2);
    if (idx == 0) idx = m * 2;
    int ans, a, b;
    for (int i = 0;i < m;i++) {
        cin >> a >> b;
        hand[a] = i + 1;
        hand[b] = i + 1;
    }
    int floor = 0;
    for (int i = 1;i < 10001;i++) {
        if (hand[i] != 0) {
            floor++;
            if (floor == idx) {
                cout << hand[i];
            }            
        }
    }

    return 0;
}