본문 바로가기
CODING/BAEKJOON

[BAEKJOON] 스위치 켜고 끄기

by snow_white 2022. 8. 2.

 


학생수만큼 받은 번호에 따라 스위치 처리

남학생일 경우 : 받은 번호의 배수인 스위치 모두 변경 (0 → 1 , 1 → 0)

여학생일 경우 : 받은 번호를 중심으로 상태가 대칭되는 스위치 모두 변경 (0 → 1 , 1 → 0)

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

public class BaekJoon1244 {
	static int N, student;
	static int[] arr;
	public static void main(String[] args) throws IOException {
		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());
		}

		student = Integer.parseInt(br.readLine());
		for(int i=0; i<student; i++) {
			st = new StringTokenizer(br.readLine());

			int gender = Integer.parseInt(st.nextToken());
			int index = Integer.parseInt(st.nextToken());

			if(gender == 1) { // 남학생일 경우
				male(index);
			}else { // 여학생일 경우
				female(index);
			}
		}

		int j = 1;
		StringBuilder sb = new StringBuilder();
		while(j<=N) {
			sb.append(arr[j]+" ");
			if(j % 20 == 0) { // 한 줄에 20개씩 출력
				sb.append("\n");
			}
			j++;
		}

		System.out.println(sb.toString());
	}
	private static void male(int index) {
		int mul = 2;
		for(int i=index; i<=N; i = index*mul++) { // 받아온 인덱스를 기점으로 배수 위치 토글 변환		
			if(arr[i] == 1)
				arr[i] = 0;
			else arr[i] = 1;
		}
	}
	private static void female(int index) {
		if(arr[index] == 1) // 받아온 위치 토글 변환
			arr[index] = 0;
		else arr[index] = 1;
        
        // 받아온 위치 제외하고 양 옆으로 대칭되는지 체크
		for(int i=index-1, j=index+1; i>=1 && j<=N; i--, j++) { // 조건문에서 배열 범위 체크
			if(arr[i] == arr[j]) {
				if(arr[i] == 1) {
					arr[i] = 0;
					arr[j] = 0;
				}
				else {
					arr[i] = 1;
					arr[j] = 1;
				}
			}else break;
		}
	}

}

'CODING > BAEKJOON' 카테고리의 다른 글

[BAEKJOON] 직사각형 쿼리  (0) 2022.09.22
[BAEKJOON] 아기상어  (0) 2022.08.30
[BAEKJOON] 연구소  (0) 2022.07.21
[BAEKJOON] 2468번 안전 영역  (0) 2022.05.26
[BAEKJOON] 2579번 계단 오르기  (0) 2022.04.24

댓글