알고리즘/BJ

[BJ] 백준 1244 스위치 켜고 끄기 (JAVA)

9_yoon 2022. 2. 24. 22:56
728x90
반응형

문제

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

풀이 방법

스위치의 상태를 바꿔주는 문제이다. 
여학생인지 남학생인지 판단 후에 남학생이라면 해당 번호의 배수에 해당하는 인덱스를 가진 스위치를 토글해주고, 여학생이라면 해당 번호의 스위치를 우선 변경 후 , -1 +1를 위치에 있는 스위치가 같은지 여부를 판단 후, 같다면 토글해주고 같지 않다면 토글하지 않는 식으로 구현했다.

제출 코드

import java.io.*;
import java.util.*;

public class BJ_1244_스위치켜고끄기 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;

		int N = Integer.parseInt(br.readLine());
		int[] switchs = new int[N + 1];
		st = new StringTokenizer(br.readLine());
		for (int i = 1; i <= N; i++) {
			switchs[i] = Integer.parseInt(st.nextToken());
		}

		int S = Integer.parseInt(br.readLine());
		for (int i = 0; i < S; i++) {
			st = new StringTokenizer(br.readLine());
			int sex = Integer.parseInt(st.nextToken());
			int num = Integer.parseInt(st.nextToken());

			if (sex == 1) { // 남자인 경우
				for (int j = 1; j <= N; j++) {
					int db = j * num; // 배수 구하기
					if (db > N)
						break; // 배수가 스위치번호를 넘어가면 반복문 종료
					switchs[db] = Math.abs(switchs[db] - 1); // 토글
				}
			} else { // 여자인 경우
				switchs[num] = Math.abs(switchs[num] - 1); // 자기 번호 토글
				int r=1;
				while (true) {
					if (num - r >= 1 && num + r <= N && switchs[num - r] == switchs[num + r]) {
						switchs[num - r] = Math.abs(switchs[num - r] - 1);
						switchs[num + r] = Math.abs(switchs[num + r] - 1);
						r++;
					}else break;
				}

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

}

 

728x90
반응형