코딩테스트/백준

[백준]1244번 스위치 켜고 끄기 - Java

GAEBAL 2022. 3. 7. 22:25
728x90

문제

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

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩

www.acmicpc.net

 

풀이

문제에 맞게 잘 따라가면 됨

남학생 부분은 % 연산으로 쉽게 해결 가능

여학생의 경우 for문 안에서 가운데 부터 왼쪽 + 오른쪽으로 하나씩 인덱스를 이동하면서 비교 후 연산을 해줌

 

코드

// 1244번 스위치 켜고 끄기
// https://www.acmicpc.net/problem/1244

package BAEKJOON;

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

public class Num1244_스위치켜고끄기 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        int[] arr = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int studentNum = Integer.parseInt(br.readLine());

        int[][] studentArr = new int[studentNum][2];
        for (int i = 0; i < studentNum; i++) {
            st = new StringTokenizer(br.readLine());
            studentArr[i][0] = Integer.parseInt(st.nextToken());
            studentArr[i][1] = Integer.parseInt(st.nextToken());
        }

        for (int i = 0; i < studentNum; i++) {
            int sex = studentArr[i][0];
            int num = studentArr[i][1];

            // 남학생
            if (sex == 1) {
                for (int j = 0; j < N; j++) {
                    if ((j + 1) % num == 0) {
                        if (arr[j] == 0) {
                            arr[j] = 1;
                        } else {
                            arr[j] = 0;
                        }
                    }
                }

            } else { // 여학생
                if (arr[num - 1] == 0) {
                    arr[num - 1] = 1;
                } else {
                    arr[num - 1] = 0;
                }
                for (int j = 1; j < N / 2; j++) {
                    if (num - 1 + j >= N || num - 1 - j < 0) {
                        break;
                    }
                    if (arr[num - 1 - j] == arr[num - 1 + j]) {
                        if (arr[num - 1 - j] == 0) {
                            arr[num - 1 - j] = 1;
                            arr[num - 1 + j] = 1;
                        } else {
                            arr[num - 1 - j] = 0;
                            arr[num - 1 + j] = 0;
                        }
                    } else {
                        break;
                    }
                }
            }
        }

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]).append(" ");
            if ((i + 1) % 20 == 0) {
                sb.setLength(sb.length() - 1);
                sb.append("\n");
            }
        }
        sb.setLength(sb.length() - 1);
        System.out.println(sb);
    }
}
728x90