(백준 1244) 켜고 끄기

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

쉬운 목차

문제

1부터 연속적으로 번호가 매겨진 스위치가 있습니다.

스위치는 켜져 있거나 꺼져 있습니다.

켜져 있으면 1, 꺼져 있으면 0입니다.

스위치의 수는 100보다 작거나 같은 양의 정수입니다.

학생들에게 임의의 숫자를 부여하고 성별에 따라 스위치의 상태를 변경합니다(스위치 상태를 변경한다는 것은 1을 0으로, 0을 1로 변경하는 것을 의미함).

남학생의 경우 임의의 배수인 스위치의 상태를 변경합니다.

예를 들어 숫자가 3이면 3, 6, 9, …를 전환합니다.

학생의 경우 임의의 숫자를 중심으로 좌우 대칭으로 가장 많은 스위치가 있는 구간을 찾아 해당 구간에 속한 스위치의 상태를 변경한다.

예를 들어, 학생이 다음과 같은 경우 3을 수신하면 스위치 3 주변의 스위치 2와 4의 상태가 같고 스위치 1과 5의 상태가 같습니다.

모든 스위치의 상태를 1에서 5로 변경합니다.

4를 받았고, 스위치 3과 스위치 5는 서로 다른 상태이므로 스위치 4만 변경됩니다.



설명

남학생과 여학생의 경우 각각 스위치의 상태를 어떻게 바꿀지 고민할 필요가 있다.

남학생의 경우단순히 숫자의 배수인 숫자를 변경합니다.

문제는 여학생의 경우오전. 여학생의 경우 두 가지 접근 방식을 고려할 수 있다.

첫 번째 방법스위치를 교체해야 하는 간격을 찾는 것입니다.

start 변수와 end 변수를 생성하여 스위치를 변경해야 하는 섹션을 찾고 해당 섹션에 포함된 스위치의 상태를 변경합니다.

두 번째 방법는 루프를 반복하면서 수신된 숫자의 양쪽을 테스트하고 같으면 스위치의 상태를 변경하고 다르면 루프를 종료하는 방법입니다.

그러나이 방법을 사용하면 수신 번호도 스위치 상태를 변경해야 함을 잊지 마십시오.

누르다20개 이상의 스위치가 있는 경우 21번째 스위치를 새 줄에 인쇄해야 합니다.

따라서 출력 관련 코드를 작성할 때 20개의 스위치가 출력되었을 때 줄 바꿈 문자를 출력하는 것을 잊지 마십시오.

암호

C++

# include <iostream>

using namespace std;

// 스위치 배열 선언
bool arr(101);

int main() {
	// 스위치 개수 변수 선언
	int switch_num;
	cin >> switch_num;
	// 스위치 상태에 맞게 입력
	for (int i = 1; i <= switch_num; ++i) {
		cin >> arr(i);
	}
	// 학생 수 변수 선언
	int student_num;
	cin >> student_num;
	// 학생의 선택에 맞게 스위치 변경
	for (int i = 0; i < student_num; i++) {
		// 학생 성별, 선택할 스위치 위치 변수 선언
		int gender, location;
		cin >> gender >> location;
		// 성별이 남성일 경우
		if (gender == 1) {
			// location의 배수의 스위치 변경
			for (int j = location; j <= switch_num; j += location)
				arr(j) = !
arr(j); } // 성별이 여성일 경우 else if (gender == 2) { // 스위치를 변경할 범위를 정하기 위해서 start, end 변수 선언 int start = location, end = location; // 스위치를 변경할 범위를 start, end에 저장 while (start >= 1 && end <= switch_num) { start--, end++; if (arr(start) !
= arr(end)) break; } // start + 1 부터 end -1 까지 스위치 변경 for (int j = start + 1; j <= end - 1; ++j) arr(j) = !
arr(j); } } // 스위치 출력 for (int i = 1; i <= switch_num ; i++) { cout << arr(i) << " "; // 20번째 스위치 이후 한 번 줄 변경 if (i % 20 == 0) cout << "\n"; } }

C++ 코드에서 남녀공학의 경우 첫 번째 메서드를 사용하여 스위치를 변경해야 하는 섹션을 가져온 다음 해당 섹션과 연결된 스위치의 상태가 변경되었습니다.

스위치로도 표현 배열은 bool 유형입니다.

스위치의 상태가 0, 1이므로 부울 데이터 유형이 가장 적합하다고 간주됩니다.

bool 데이터 유형을 사용하더라도 !
운영자
를 사용하여 스위치의 상태를 쉽게 변경할 수 있습니다.