21918 전구

DONGJIN IM·2022년 6월 30일
0

코딩 테스트

목록 보기
133/137

문제 이해

N개의 전구가 있고, 전구의 상태는 1 : 켜져 있음, 0 : 꺼져 있음을 의미한다.

전구 제어 명령은 아래와 같다.
1. [i x] : i번째 전구를 x로 변경한다
2. [l r] : l ~ r번째까지 전구 상태를 반전시킨다
3. [l r] : l ~ r번째까지 전구를 끈다
4. [l r] : l ~ r번째까지 전구를 킨다


문제 풀이

어려운 문제는 아니였다.
그냥 Brute-Force 방식으로 직접 배열에 상태를 저장해놓고 전구 제어 명령에 따라 상태를 바꾸면 된다.


코드

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

public class Main {
	static StringBuilder sb = new StringBuilder();
	static FastReader sc = new FastReader();
	
	static int N,M;
	static int[] arr;
	
	static void case_one(int i, int x) {
		arr[i] = x;
	}
	
	static void case_two(int l, int r) {
		for(int i =l;i<r+1;i++) {
			arr[i] = (arr[i] + 1)%2;
		}
	}
	
	static void case_three(int l, int r) {
		for(int i =l;i<r+1;i++) arr[i] = 0;
	}
	
	static void case_four(int l, int r) {
		for(int i =l;i<r+1;i++) arr[i] = 1;
	}
	
	public static void main(String[] args) {
		N = sc.nextInt();
		M = sc.nextInt();
		
		arr = new int[N+1];
		
		for(int i =1;i<N+1;i++) {
			arr[i]= sc.nextInt();
		}
		
		
		for(int rec=0;rec<M;rec++) {
			
			int how = sc.nextInt();
			int first = sc.nextInt();
			int second = sc.nextInt();
			
			switch(how) {
			case 1:
				case_one(first, second);
				break;
				
			case 2:
				case_two(first, second);
				break;
				
			case 3:
				case_three(first, second);
				break;
				
			case 4:
				case_four(first, second);
				break;
			}
		}
		
		for(int i =1;i<N+1;i++) sb.append(arr[i]).append(" ");
		
		System.out.println(sb);
		
	}
	
	static class FastReader // 빠른 입력을 위한 클래스
}

결과

profile
개념부터 확실히!

0개의 댓글

관련 채용 정보