[BJ1244] 스위치 켜고 끄기
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘

[BJ1244] 스위치 켜고 끄기

 

 백준 - 스위치 켜고 끄기 

문제 링크

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

 

1244번: 스위치 켜고 끄기

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

www.acmicpc.net

 

문제 입력 1

8
0 1 0 1 0 0 0 1
2
1 3
2 3
1 0 0 0 1 1 0 1

 

문제 입력 2

8
0 0 0 0 0 0 0 0
8
1 2
1 3
1 4
1 5
2 2
2 3
2 4
2 5
0 1 1 1 0 1 1 0

 

문제 풀이

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 구현, 시뮬레이션 
public class Main {
	static int N, K;
	static int[] arr;
	static int[][] stus;


	// 스위치 on/off 함수
	public static int doSwitch(int idx) {
		return arr[idx] == 1 ? 0 : 1;
	}


	// 스위치 대칭 찾는 함수
	public static void isSwitch(int idx) {
		for (int i = 1; i <= N; i++) {
			if (idx - i < 1 || idx + i >= N + 1) continue;

			int prev = arr[idx - i];
			int next = arr[idx + i];
			if (prev == next) {
				arr[idx - i] = doSwitch(idx - i);
				arr[idx + i] = doSwitch(idx + i);
			} else break; // 여기 조심. break 안하면 계속 찾는다.

		}

	}


	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("input2.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		// 스위치 갯수, 스위치 배열
		N = Integer.parseInt(br.readLine());
		arr = new int[N + 1];

		// 스위치 배열 입력
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 1; i <= N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		// 학생 수, 학생 배열
		K = Integer.parseInt(br.readLine());
		stus = new int[K][2];

		// 학생 배열 입력
		for (int i = 0; i < K; i++) {
			st = new StringTokenizer(br.readLine());
			stus[i][0] = Integer.parseInt(st.nextToken());
			stus[i][1] = Integer.parseInt(st.nextToken());
		}

		// 탐색
		for (int i = 0; i < K; i++) {
			int gender = stus[i][0]; // 학생 성별
			int no = stus[i][1]; // 받은 스위치 번호

			// 남학생 이라면
			if (gender == 1) {
				for (int j = no; j <= N; j += no)
					arr[j] = doSwitch(j);
			} else if (gender == 2) { // 여학생 이라면
				arr[no] = doSwitch(no);
				isSwitch(no);
			}

		}

		// 20개마다 출력해야 한다.
		for (int i = 1; i <= N; i++) {
			System.out.print(arr[i] + " ");
			if (i % 20 == 0) System.out.println();
		}

	} // end main
} // end class

 

 

 

 

 

 

 

 

 

 

# 백준 스위치 켜고 끄기 java # BJ1244 java


 

728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글

[BJ12891] DNA 비밀번호  (0) 2022.08.08
[BJ21921] 블로그  (0) 2022.08.08
[BJ2309] 일곱 난쟁이  (0) 2022.08.01
[BJ14889] 스타트와 링크  (0) 2022.05.14
[BJ14888] 연산자 끼워넣기  (0) 2022.05.11