[BOJ] 1244 스위치 켜고 끄기

1 분 소요

시뮬레이션 예제

문제

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

문제 풀이

package Baekjoon.Simulation;

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

/**
 * Created by kyeahen.
 * Title : 1244 스위치 켜고 끄기
 * Category : 시뮬레이션
 * Date: 2021/06/02
 */
public class BJ_1244 {

    static int switchNum, studentNum;
    static int[] status;

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

        switchNum = Integer.parseInt(br.readLine());

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

        studentNum = Integer.parseInt(br.readLine());
        while (studentNum-- > 0) {
            st = new StringTokenizer(br.readLine());
            //남학생은 배수, 여학생은 좌우 대칭이면 바꾸기, 아니면 자기만
            int gender = Integer.parseInt(st.nextToken());
            int num = Integer.parseInt(st.nextToken());

            if (gender == 1) { //남자

                for (int i = num; i <= switchNum; i += num) {
                    if (status[i] == 0) { status[i] = 1; }
                    else { status[i] = 0; }
                }
            }

            if (gender == 2) { //여자

                if ((num == 1 || num == switchNum) || status[num - 1] != status[num + 1]) { //범위 초과 or 대칭x
                    if (status[num] == 0) { status[num] = 1; }
                    else { status[num] = 0; }

                } else {
                    if (status[num] == 0) { status[num] = 1; }
                    else { status[num] = 0; }

                    int left = num - 1;
                    int right = num + 1;

                    while (left > 0 && right <= switchNum) {

                        if (status[left] == status[right]) { //대칭
                            if (status[left] == 0) {
                                status[left] = status[right] = 1;
                            } else {
                                status[left] = status[right] = 0;
                            }

                            --left;
                            ++right;
                        } else {
                            break;
                        }
                    }
                }

            }
        }

        for (int i = 1; i <= switchNum; i++) {
            System.out.print(status[i] + " ");

            if (i % 20 == 0) {
                System.out.println();
            }
        }
    }
}

TMI

21/06/02: 알고리즘 스터디 문제 풀이🤓

댓글남기기