문제
풀이
구현, 시뮬레이션
성별에 따라서 스위치를 바꾸는 방법이 다르다. 남자의 경우 입력되는 숫자의 배수에 해당하는 스위치를 바꾼다.
// num의 배수에 해당하는 스위치는 상태를 바꾼다.
for (int i = num; i <= N; i += num)
{
button[i] = button[i] == 0 ? 1 : 0;
}
여자의 경우 입력되는 숫자를 중심으로 좌우가 대칭인 범위의 스위치를 바꾼다. 입력되는 숫자의 양 옆으로 start, end index를 두어 대칭인 최대 범위를 구한다.
// start에서 end까지 대칭
while (1 < start && end < N)
{
if (button[start - 1] == button[end + 1])
{
start--;
end++;
}
else
{
break;
}
}
코드
#include <iostream>
using namespace std;
int button[102];
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
for (int i = 1; i <= N; ++i)
{
cin >> button[i];
}
int K;
cin >> K;
while (K--)
{
int gender, num;
cin >> gender >> num;
if (gender == 1)
{
// num의 배수에 해당하는 스위치는 상태를 바꾼다.
for (int i = num; i <= N; i += num)
{
button[i] = button[i] == 0 ? 1 : 0;
}
}
else
{
int start = num;
int end = num;
// start에서 end까지 대칭
while (1 < start && end < N)
{
if (button[start - 1] == button[end + 1])
{
start--;
end++;
}
else
{
break;
}
}
for (int i = start; i <= end; ++i)
{
button[i] = button[i] == 0 ? 1 : 0;
}
}
}
for (int i = 1; i <= N; ++i)
{
cout << button[i] << " ";
if (i % 20 == 0)
{
cout << '\n';
}
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준][C++] 17143: 낚시왕 (1) | 2024.04.21 |
---|---|
[백준][C++] 14719: 빗물 (0) | 2024.04.14 |
[백준][C++] 16235: 나무 재테크 (0) | 2024.04.11 |
[백준][C++] 2636: 치즈 (0) | 2024.04.10 |
[백준][C++] 15683: 감시 (0) | 2024.04.10 |