https://www.acmicpc.net/problem/1244
논리 연산자(부정) :
!
구현, 시뮬 문제인데 매번 알고리즘 로직은 잘 만드는데 수식을 조금 더럽게 만들어서 코드에서 오류가 발생하는 것 같다.
1. 변수 선언해서 배열 접근은 되도록 깔끔하게
2. 반복문에서는 i, j를 기존 변수로 선언하고, 종료조건이나 증감조건은 i, j 이용해서 깔끔하게
3. 반복문에서 while문에 조건 주면 break 안 써도 저절로 반복문 탈출하니까 무조건 for문 쓰지 말고, while문 유동적으로 사용해주기
#include <iostream>
#include <vector>
using namespace std;
int arr[101];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, M;
cin >> N;
for (int i = 0; i < N; i++) {
int tmp;
cin >> tmp;
arr[i] = tmp;
}
cin >> M;
for (int i = 0; i < M; i++) {
int what, num;
cin >> what >> num;
if (what == 1) { //남
for (int j = num - 1; j < N; j += num) {
arr[j] = !arr[j];
}
}
else { //여
int left = num - 2;
int right = num;
arr[num - 1] = !arr[num - 1];
while (left >= 0 && right < N && arr[left] == arr[right]) {
arr[left] = !arr[left];
arr[right] = !arr[right];
left--;
right++;
}
}
}
for (int i = 0; i < N; i++) {
cout << arr[i] << " ";
if ((i + 1) % 20 == 0) cout << '\n';
}
return 0;
}