728x90
5개(n)의 방이 있을때
1 - 1 2 3 4 5
2 - 2 4
3 - 3
4 - 4
5 - 5
와 같이 각각의 배수인 방에서
문이 열려있다면 닫고
닫혀있다면 여는 문제입니다.
bool 형식으로 room을 100개의 방을 만들어 주었고
해당하는 숫자에 방문을 하였을 시 false -> true로, true -> false로 변경해 주었습니다.
마지막에 true(열림)의 갯수를 체크하여 나가는 사람의 수를 확인했습니다.
#include
using namespace std;
bool room[100];
void init() // 배열 초기화
{
for (int i = 0; i < 100; ++i) {
room[i] = false;
}
}
int main(int argc, char *argv[])
{
int cycle, num, escape, round;
cin >> cycle; // 반복 횟수
for (int i = 0; i < cycle; ++i) {
init();
cin >> round; // 방의 갯수
num = 0;
escape = 0;
for (int j = 1; j <= round; ++j) {
num = j - 1; // 배수방 시작위치
while (num < round) { // 마지막 방이 될때까지 반복
if (room[num] == false) { // 닫혔으면 열기
room[num] = true;
}
else {
room[num] = false; // 열렸으면 닫기
}
num += j; // 배수만큼 증가
}
}
for (int k = 0; k < round; ++k) {
if (room[k] == true) {
++escape; // 열린 수만큼 탈출 인원 증가
}
}
cout << escape << endl; // 출력
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 2441번 별 찍기 - 5 (0) | 2019.04.03 |
---|---|
[C++] 백준 1563번 개근상 (0) | 2019.03.31 |
[C++] 백준 5545번 최고의 피자 (0) | 2019.03.08 |
[C++] 백준 1138번 한 줄로 서기 (0) | 2019.03.07 |
[C++] 백준 4485번 녹색 옷 입은 애가 젤다지? (0) | 2019.03.06 |