BOJ - 1244번 스위치 켜고 끄기 (C++)

woga·2020년 12월 2일
0

BOJ

목록 보기
76/83
post-thumbnail

문제 출처: 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;
}
profile
와니와니와니와니 당근당근

0개의 댓글