[BOJ/C++] 1244 스위치 켜고 끄기

Hanbi·2024년 1월 23일
0

Problem Solving

목록 보기
88/108
post-thumbnail

문제

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;
}
profile
👩🏻‍💻

0개의 댓글