ULISIA's Developer Life

[Backjoon] 1244번 스위치 켜고 끄기 Java 문제 풀이 본문

Algorithm/Backjoon

[Backjoon] 1244번 스위치 켜고 끄기 Java 문제 풀이

ULISIA 2023. 7. 10. 13:23

출처:1244번: 스위치 켜고 끄기

문제 자체는 상세히 설명이 되어있으므로 별다른 해석이 필요하지는 않았다.

문제 해석

문제에서 중점적으로 다루어야 할 요소는 크게 세가지다.

  1. 스위치.
  2. 사람의 성별.
  3. 사람에게 주어진 수.

이 문제를 처음부터 풀어가는 진행과정을 차근차근 요약해 보겠다.

  1. 스위치의 개수 int N 입력받기
  2. 스위치의 개수만큼 스위치들을 저장할 수 있는 int[] Switch 초기화
  3. 사람의 수 int M 입력받기
  4. 사람의 수 M 만큼 반복하며 사람의 성별 gender와 주어진 수 num에 의한 조건문
    4-1. 만일 성별이 남자라면 주어진 수의 배수만큼 Switch 배열의 수를 뒤집는다.
    4-2. 만일 성별이 여자라면 기준점을 뒤집은 후 기준점+-k(k는 증감값)가 1혹은 N보다 작거나 클 경우 반복문을 종료하는 조건으로 계속해서 대칭인지를 비교후 뒤집는다.
  5. 모든 사람의 뒤집기 작업이 끝난 이후 최종적으로 나온 Switch 배열을 한줄에 20개씩 출력한다.

결국 위의 내용을 차근차근 반복문과 조건문을 잘 활용하여 그대로 구현하는 문제이다.

해답코드

package anystep;

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Java_1244 {
    //스위치 켜고 끄기
    static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
    static StringTokenizer stk;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        int N = Integer.parseInt(in.readLine());
//        int[] Switch = Arrays.stream(in.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int[] Switch = new int[N];
        stk = new StringTokenizer(in.readLine());
        for (int i = 0; i < N; i++) {
            Switch[i] = Integer.parseInt(stk.nextToken());
        }
        int M = Integer.parseInt(in.readLine());
        for (int n = 0; n < M; n++) {
            stk = new StringTokenizer(in.readLine());
            int gender = Integer.parseInt(stk.nextToken());
            int num = Integer.parseInt(stk.nextToken());
            if (gender == 1) {
                for (int i = 0; i < Switch.length; i++) {
                    if ((i + 1) % num == 0) {
                        if (Switch[i] == 1) {
                            Switch[i] = 0;
                        } else {
                            Switch[i] = 1;
                        }
                    }
                }
            } else {
                if(Switch[(num-1)]==1){
                    Switch[(num-1)]=0;
                }else{
                    Switch[(num-1)]=1;
                }
                int k = 1;
                while (true) {
                    if ((num - 1) - k < 0 || (num - 1) + k >= N) break;
                    if (Switch[(num - 1) - k] == Switch[(num - 1) + k]) {
                        if (Switch[(num - 1) - k] == 1) {
                            Switch[(num - 1) - k] = 0;
                            Switch[(num - 1) + k] = 0;
                        } else{
                            Switch[(num - 1) - k] = 1;
                            Switch[(num - 1) + k] = 1;
                        }
                        k++;
                    } else break;
                }
            }
        }
        for (int i = 0; i < N; i++) {
            System.out.print(Switch[i] + " ");
            if ((i + 1) % 20 == 0) System.out.println();
        }
    }
}