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

김건우·2024년 3월 5일
0

문제 풀이

목록 보기
50/62

스위치 켜고 끄기


풀이 방법

문제 자체는 정답률에 비해 쉬운 문제였다.
이번 문제에서 내가 틀린 부분이 2가지 있었다.

  1. 인덱스 범위 넘어갔을때 처리
  2. 출력 값 설정

1번 문제는 쉽게 찾아서 처리해줄 수 있었고, 출력 값 설정 또한 문제를 대충 읽어서 생긴 문제였다.

문제속에 답이 있다는 옛 말처럼 문제를 꼼꼼히 읽고 푸는 걸 습관들이자!

코드

public class Main {

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

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

        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        int[] switches = new int[n+1];
        for(int i=1;i<=n;i++) {
            switches[i] = Integer.parseInt(st.nextToken());
        }

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

        for(int i=0;i<student;i++) {
            st = new StringTokenizer(br.readLine(), " ");
            int gender = Integer.parseInt(st.nextToken());
            int number = Integer.parseInt(st.nextToken());

            int temp = number;
            if(gender == 1) { // 남자인 경우
                while (temp <= n) {

                    switches[temp] = switches[temp] == 0 ? 1 : 0;
                    temp += number;
                }
            }
            else if(gender == 2) { // 여자인 경우
                switches[number] = switches[number] == 0 ? 1 : 0;

                int size = 1;
                while(true) {
                    int prev = number - size;
                    int next = number + size;

                    if(prev < 1 || next > n) break;

                    if(switches[prev] == switches[next]){
                        switches[prev] = switches[prev] == 0 ? 1 : 0;
                        switches[next] = switches[next] == 0 ? 1 : 0;
                        size++;
                    }
                    else break;
                }
            }
        }

        StringBuilder sb = new StringBuilder();
        for(int i=1;i<=n;i++) {
            sb.append(switches[i]).append(" ");
            if(i==20 || i==40 || i==60 || i==80){
                sb.append("\n");
            }
        }
        System.out.println(sb);
    }
}
profile
공부 정리용

0개의 댓글