본문 바로가기

Algorithm Problems/구현

[백준/C++] 13909번: 창문 닫기

문제

https://www.acmicpc.net/problem/13909


문제 요약

N개의 창문이 있고, N명의 사람이 있다.

 

차례대로 1번부터 N번째 사람이 N의 배수 번째 창문을 열려 있으면 닫고, 닫혀 있으면 연다.

 

마지막으로 열려 있는 창문의 개수를 출력한다.


코드

#include <iostream>

using namespace std;

int main() {
    int num;
    cin >> num;

    if (num <= 2) {
        cout << num;
        return 0;
    }

    int minus = 2;
    int cnt = 0;

    while (true) {

        if (num == 0) {
            cout << cnt;
            break;
        }
        else if (num < minus) {
            cout << cnt + 1;
            break;
        }
        else {
            num -= (minus + 1);
            minus = minus + 2;
            cnt++;
        }
    }

    return 0;
}

코드 설명

과정이 잘 이해가 안가서 직접 손으로 그려보았다.

 

0이 2번, 4번, 6번, 8번 이런 식으로 반복되고, 1이 찍히는 것을 알 수 있어서 코드로 구현했다..


고찰

뭔가 이상해서 다시 봤더니, 1, 4, 9, 16, ... 제곱수에 해당하는 번호에 1이 찍힌다는 사실을 알게 되었다.

 

ㅠㅠ