본문 바로가기
전공공부/코딩테스트

(c++) 백준 "1244 : 스위치 켜고 끄기"

by 시아나 2022. 4. 22.

https://www.acmicpc.net/problem/1244

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩

www.acmicpc.net


나의 코드

#include <iostream>
#include <vector>
using namespace std;

int N,S;
vector<pair<int,int>> students;
void solution(int *lights) { //남학생 : 1, 여학생 : 2
	for (int i = 0; i < S; i++) {
		int n = students[i].second;
		if (students[i].first == 1) { // 남
			for (int i = 1; n*i <= N; i++) {
				lights[n * i] = !lights[n * i];
			}
		}
		else {//여
			lights[n] = !lights[n];
			for (int k = 1; n - k > 0 && n + k <= N; k++) {
				if (lights[n - k] == lights[n + k]) {
					lights[n- k] = !lights[n - k];
					lights[n+ k] = !lights[n + k];
				}
				else break;
			}
		}
	}
}

int main() {
	cin >> N;
	int lights[200];
	for (int i = 1; i <= N; i++) {
		cin >> lights[i];
	}
	cin >> S;
	for (int i = 0; i < S; i++) {
		int n1, n2;
		cin >> n1 >> n2;
		students.push_back({ n1,n2 });
	}
	solution(lights);
	for (int i = 1; i <= N; i++) {
		cout << lights[i] << " ";
		if (i % 20 == 0) {
			cout << endl;
		}
	}
	return 0;
}

 

문제를 잘 읽자!

조건문의 범위를 잘 생각하자