문제
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이 찍힌다는 사실을 알게 되었다.
ㅠㅠ
'Algorithm Problems > 구현' 카테고리의 다른 글
[백준/C++] 1244번: 스위치 켜고 끄기 (1) | 2024.10.17 |
---|---|
[백준/C++] 1251번: 단어 나누기 (2) | 2024.10.11 |
[백준/C++] 4072번: Words (0) | 2024.06.12 |
[백준/C++] 4447번: 좋은놈 나쁜놈 (0) | 2024.04.15 |
[백준/C++] 1718번: 암호 (1) | 2024.04.06 |