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

 

1244번: 스위치 켜고 끄기

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

www.acmicpc.net

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

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int numSwitch = Integer.parseInt(br.readLine());
		int[] stateSwitch = new int[numSwitch];
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		for(int i = 0; i < numSwitch; i++) {
			stateSwitch[i] = Integer.parseInt(st.nextToken());
		}
		
		int T = Integer.parseInt(br.readLine());
		while(T-- > 0) {
			st = new StringTokenizer(br.readLine());
			int gender = Integer.parseInt(st.nextToken());
			int getNum  = Integer.parseInt(st.nextToken());
			
			if(gender == 1) {
				for(int i = 0; i < numSwitch; i++) {
					if((i + 1) % getNum == 0) {
						stateSwitch[i] = stateSwitch[i] == 0 ? 1 : 0;
					}
				}
			} else {
				stateSwitch[getNum-1] = stateSwitch[getNum-1] == 0 ? 1 : 0;
				
				int idxLeft = getNum - 2;
				int idxRight = getNum;
				
				while(idxLeft >= 0 && idxRight < numSwitch) {
					if(stateSwitch[idxLeft] == stateSwitch[idxRight]) {
						stateSwitch[idxLeft] = stateSwitch[idxLeft] == 0 ? 1 : 0;
						stateSwitch[idxRight] = stateSwitch[idxRight] == 0 ? 1 : 0;
						--idxLeft;
						++idxRight;
					}else {
						break;
					}
				}
			}
		}
		for(int i = 0; i < numSwitch; i++) {
			System.out.print(stateSwitch[i] + " ");
			if((i+1) % 20 == 0) {
				System.out.println();
			}
		}
	}
}

+ Recent posts