문제풀이

[백준] 1244 스위치 켜고 끄기 - JAVA

자르비옹스 2022. 2. 28. 01:11

1. 문제 유형 : 구현

2. 시간복잡도 : O(N^2)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int N = Integer.parseInt(in.readLine());
		int[] status = new int[N+1];
		StringTokenizer st = new StringTokenizer(in.readLine());
		for (int i = 1; i <= N; i++) {
			status[i] = Integer.parseInt(st.nextToken());
		}
		int sN = Integer.parseInt(in.readLine());
		for (int i = 0; i < sN; i++) {
			st = new StringTokenizer(in.readLine());
			int gender = Integer.parseInt(st.nextToken());
			int index = Integer.parseInt(st.nextToken());
			
			if(gender == 1) {
				//남학생
				int nextIdx = index;
				while(nextIdx <= N) {
					status[nextIdx] = (status[nextIdx] == 0 ? 1 : 0);
					nextIdx += index;
				}
			}else {
				// 여학생
				int next = index;
				int prev = index;
				while(next <= N && prev > 0) {
					if(status[prev] == status[next]) {
						if(status[prev] == 0) {
							status[prev--] = status[next++] = 1;
						}else {
							status[prev--] = status[next++] = 0;
						}
						
					}else {
						break;
					}
				}
			}
		}
		

		for (int i = 1; i <= N; i++) {
			sb.append(status[i]).append(" ");
			if(i%20 == 0) sb.append("\n");
		}
		System.out.println(sb);
	}

}