[백준] JAVA / 전구

경운·2025년 12월 19일

[BOJ / 백준]

목록 보기
19/21
post-thumbnail

BOJ/백준 21918 - 전구

백준 21918 - 전구

1. 문제 분석

문제 이해

전구의 상태를 주어진 명령어를 다 수행한 결과 전구는 어떤 상태인지 알아내는 문제이다.

전구의 상태는 0(꺼진거), 1(켜진거) 2가지가 있다.
명령어의 종류는 4가지가 있다.

  • 1번 명령어
    • [i, x] - i 번째 전구의 상태를 x로 변경
  • 2번 명령어
    • [l, r] - l번째부터 r번째까지의 전구의 상태를 변경(0 -> 1, 1 -> 0)
  • 3번 명령어
    • [l, r] - l번째부터 r번째까지의 전구를 끔
  • 4번 명령어
    • [l, r] - l번째부터 r번째까지의 전구를 킴

풀이방법

  • 전구의 상태를 저장하는 배열
int[] state = new int[N];
		
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i < N; i++) {
			state[i] = Integer.parseInt(st.nextToken());
		}
  • 명령어 수행
if(a == 1) { // 1번 명령어
	state[b - 1] = c;
}
			
if(a == 2) { // 2번 명령어
	for(int j = b; j <= c; j++) {
		if(state[j - 1] == 0) {
			state[j - 1] = 1;
		} else {
			state[j - 1] = 0;
		}
	}
}
			
if(a == 3) { // 3번 명령어
	for(int j = b; j <= c; j++) {
		state[j - 1] = 0;
	}
}
			
if(a == 4) { // 4번 명령어
	for(int j = b; j <= c; j++) {
		state[j - 1] = 1;
	}
}
  • 바뀐 전구의 상태를 출력
for(int i = 0; i < state.length; i++) {
			System.out.print(state[i] + " ");
		}

2. 코드 구현

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

public class No_21918 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		int[] state = new int[N];
		
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i < N; i++) {
			state[i] = Integer.parseInt(st.nextToken());
		}
		
		for(int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			int c = Integer.parseInt(st.nextToken());
			
			if(a == 1) {
				state[b - 1] = c;
			}
			
			if(a == 2) {
				for(int j = b; j <= c; j++) {
					if(state[j - 1] == 0) {
						state[j - 1] = 1;
					} else {
						state[j - 1] = 0;
					}
				}
			}
			
			if(a == 3) {
				for(int j = b; j <= c; j++) {
					state[j - 1] = 0;
				}
			}
			
			if(a == 4) {
				for(int j = b; j <= c; j++) {
					state[j - 1] = 1;
				}
			}
		}
		
		for(int i = 0; i < state.length; i++) {
			System.out.print(state[i] + " ");
		}
	}
}

0개의 댓글