스위치 켜고 끄기

최민수·2023년 8월 1일
0

알고리즘

목록 보기
82/94
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) throws IOException {
        // 입력
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bufferedReader.readLine());
        List<Integer> sw = Arrays.stream(bufferedReader.readLine().split(" "))
                .map(Integer::parseInt)
                .collect(Collectors.toList());
        int size = Integer.parseInt(bufferedReader.readLine());

        for (int i = 0; i < size; i++) {
            String[] split = bufferedReader.readLine().split(" ");
            // 성별 조건으로 스위치 조작
            if (split[0].equals("1")) { // 남
                for (int j = 0; j < sw.size(); j++) {
                    if ((j+1) % Integer.parseInt(split[1]) != 0) {
                        continue;
                    }
                    changeSw(sw, j);
                }
            } else { // 여
                int index = Integer.parseInt(split[1]) - 1;
                changeSw(sw, index);

                // 좌우 대칭 확인
                for (int j = 1; j <= sw.size() / 2 + 1; j++) {
                    int leftIdx = index - j;
                    int rightIdx = index + j;
                    if (leftIdx < 0 || rightIdx > sw.size() - 1) {
                        break;
                    }
                    int leftItem = sw.get(leftIdx);
                    int rightItem = sw.get(rightIdx);
                    if (leftItem == rightItem) {
                        changeSw(sw, index - j);
                        changeSw(sw, index + j);
                    } else {
                        break;
                    }
                }
            }
        }
        printFormat(sw);
    }

    private static void printFormat(List<Integer> sw) {
        for (int i = 0; i < sw.size(); i++) {
            if ((i + 1) % 20 == 0 || i == sw.size() - 1) {
                System.out.println(sw.get(i));
                continue;
            }
            System.out.print(sw.get(i) + " ");
        }
    }

    private static void changeSw(List<Integer> sw, int idx) {
        if (sw.get(idx) == 0) {
            sw.set(idx, 1);
        } else {
            sw.set(idx, 0);
        }
    }
}

S4

주어진 조건에 맞게 입력받고 단순 구현하면 되는 간단한 문제였다.

하지만 출력형식이 조금 까다로워서, 따로 함수로 빼서 처리해주었다.


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

profile
CS, 개발 공부기록 🌱

0개의 댓글