남학생과 여학생의 작동 방식을 구현하면 된다.
남학생은 배수일 때 i%n == 0
여학생은 대칭일 때
for(int i{0}; sw[n-i] === sw[n+i]; ++i)
범위를 벗어날 때를 신경써주면 된다.
구현은 그렇게 어렵지 않다.
대칭일 때가 구현이 어려울 수 있다.
//백준 1244, 스위치 켜고 끄기
#include <iostream>
int main (){
int s, p;
bool sw[101] = {0};
std::cin >> s;
for(int i{1}; i<=s; ++i) std::cin >> sw[i];
std::cin >> p;
while(p--){
int se, num;
std::cin >> se >> num;
if(se == 1){
for(int i{1}; i<=s; ++i){
if(i % num == 0) sw[i] = !sw[i];
}
}
else{
sw[num] = !sw[num];
for(int i{1}; sw[num+i] == sw[num-i]; ++i){
if(num+i > s || num-i < 1) break;
sw[num+i] = !sw[num+i];
sw[num-i] = !sw[num-i];
}
}
}
for(int i{1}; i<=s; ++i){
std::cout << sw[i] << ' ';
if(i%20 == 0) std::cout << '\n';
}
return 0;
}
여학생일 때 어떻게 구할지 한참 생각하고 답을 봤는데 간단하게 for문을 통해 구할 수 있었다... 자꾸 중심이라는 생각에 for문의 시작을 중심으로 놔야겠다는 생각이 들어 오류를 범한 것 같다.
2025-01-17T00:49:31.974Z