구현/시뮬레이션 | BOJ 백준 1244번 스위치 켜고 끄기 | Java

Table of Contents


BOJ 백준 1244번 스위치 켜고 끄기 | Java

📌 백준 1244번 문제 바로가기

🔎 문제 설명

🩶 실버 4

- 난이도 ★☆☆☆
- 구현/시뮬레이션

가볍게 손풀기로 풀려고 했지만 생각보다 오래 걸렸던 문제라 기록을 남긴다. 어렵진 않지만 문제를 생각보다 잘 이해해야 하는 문제로, 질문 게시판에 많은 사람들이 도움을 요청하는 모습을 볼 수 있다. 정답 비율이 무려 20%라구..

문제에서 헷갈릴 만한 포인트들을 정리해서 남길테니 혹시라도 이 글을 찾아본 다른 사람에게 도움이 되었으면 좋겠다!


💡 문제 이해 포인트

  • 문제 출력 형식: 스위치 상태를 20개씩 끊어서 출력해야 함
  • 여학생이 자신이 받은 번호로부터 좌우가 대칭인 스위치 범위까지 스위치 상태를 바꾼다.
    • 자신이 받은 번호는 항상 스위치 상태를 바꾼다

추가로 내가 문제 풀이에 도움이 되었던 반례를 아래에 첨부하였다. 위의 문제 이해 포인트를 모두 알맞게 적용했음에도 여전히 안 된다면 남학생 코드에서 놓치고 있는 포인트가 있을 수 있다.



💻 내 코드

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

public class Main_1244_S4_스위치_켜고_끄기 {
	static int N, switches[];
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		switches = new int[N];
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < N; i++) switches[i] = Integer.parseInt(st.nextToken());

		int t = Integer.parseInt(br.readLine());
		int gender, num;
		for (int i = 0; i < t; i++) {
			st = new StringTokenizer(br.readLine());
			gender = Integer.parseInt(st.nextToken());
			num = Integer.parseInt(st.nextToken());
			operateSwitch(gender, num);
		}
		for (int j = 0; j < N; j++) {
			System.out.print(switches[j] + " ");
			if ((j + 1) % 20 == 0) System.out.println();
		}
	}

	private static void operateSwitch(int gender, int num) {
		if (gender == 1) {
			for (int i=num; i<=N; i+=num) switches[i-1] ^= 1;
			return;
		}
		switches[--num] ^= 1;
		for (int i=1; i<N; i++) {
			if (0>(num-i) || (num+i)>=N) break;
			if (switches[num+i]!=switches[num-i]) break;
			switches[num + i] ^= 1;
			switches[num - i] ^= 1;
		}
	}
}

/*
반례
8
0 1 0 1 0 0 0 1
2
1 8
2 7
*/




 


💙 You need to log in to GitHub to write comments. 💙
If you can't see comments, please refresh page(F5).