문제 출처: https://www.acmicpc.net/problem/1244
Silver 4
이해하고 로직을 잘 짜면 되는 문제다.
근데 미묘하게 코드가 다를 뿐인데 계속 틀려서 의아했다..
#include <iostream>
#include <algorithm>
using namespace std;
int arr[101];
int N;
void ifGirl(int n) {
int left = n - 1;
int right = n + 1;
arr[n] = !arr[n];
while (left >= 1 && right <= N) {
if (arr[left] != arr[right]) {
break;
}
arr[left] = !arr[left];
arr[right] = !arr[right];
left--;
right++;
}
}
void ifBoy(int n) {
for (int i = n; i <= N; i += n) {
arr[i] = !arr[i];
}
}
int main() {
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> arr[i];
}
int type;
cin >> type;
for (int i = 0; i < type; i++) {
int sex, n;
cin >> sex >> n;
if (sex == 1) {
ifBoy(n);
}
else ifGirl(n);
}
for (int i = 1; i <= N; i++) {
cout << arr[i] << " ";
if (i % 20 == 0) cout << "\n";
}
return 0;
}
아직도 이해 못하겠는데 왜 틀렸지 코드
#include <iostream>
#include <algorithm>
using namespace std;
int arr[101];
int N;
void ifGirl(int n) {
int left = n - 1;
int right = n + 1;
while (left >= 1 && right <= N) {
if (arr[left] != arr[right]) {
arr[n] = !arr[n];
return;
}
left--;
right++;
}
for (int i = left + 1; i < right; i++) {
arr[i] = !arr[i];
}
}
void ifBoy(int n) {
int num = 1;
while (n * num <= N) {
n = n * num;
arr[n] = !arr[n];
num++;
}
}
int main() {
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> arr[i];
}
int type;
cin >> type;
for (int i = 0; i < type; i++) {
int sex, n;
cin >> sex >> n;
if (sex == 1) {
ifBoy(n);
}
else ifGirl(n);
}
for (int i = 1; i <= N; i++) {
cout << arr[i] << " ";
if (i % 20 == 0) cout << "\n";
}
return 0;
}