코깽이의 코딩일기

Java 백준 12927 배수 스위치 본문

PS/백준

Java 백준 12927 배수 스위치

코깽이 2024. 1. 27. 22:12
반응형

백준 링크

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

 

12927번: 배수 스위치

첫째 줄에 전구의 상태가 1번 전구부터 차례대로 주어진다. Y는 전구가 켜 있는 경우, N은 전구가 꺼져있는 경우이다. 전구의 개수는 1보다 크거나 같고 1,000보다 작거나 같은 자연수이다.

www.acmicpc.net


문제

입력

출력

입출력 예시

 


제출한 코드

import java.io.*;
import java.util.*;

public class Main {
    static Scanner sc = new Scanner(System.in);
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws IOException {
        String input = br.readLine();
        ArrayList<Integer> change = new ArrayList<>();
        int[] data = new int[input.length()];
        // start input data
        for (int i = 0; i < data.length; i++) {
            data[i] = (input.charAt(i) == 'Y') ? 0 : 1;
        }
        // end

        // 데이터 순회
        for (int i = 0; i < data.length; i++) {
            // data에 저장된 값을 비교하기 전에 change에 저장된 값의 배수인지 확인하고 몇번 반전이 일어났는지 체크한다.
            int count = 0;
            if (!change.isEmpty()) {
                for (int j = 0; j < change.size(); j++) {
                    if ((i + 1) % change.get(j) == 0) {
                        count += 1;
                    }
                }
            }
            // data가 짝수인 경우 On
            // change에 저장해서 해당 배수가 반전된다는 것을 저장
            // ex) 0번 인덱스 짝수인 경우 1번 전구이기에 1 저장
            if ((data[i]+count) % 2 == 0) {
                change.add(i + 1);
            }
            // data가 홀수인 경우 Off

        }
        System.out.println(change.size());
    }
}

 

 

1. data[]에 입력된 값이 Y인지 N인지 0과 1로 저장해둔다.

2. change라는 동적배열에 눌려진 버튼의 번호를 저장해둔다.

3. change에서 값을 가져와 해당 배수의 값이 눌렸는지 확인한다.

4. for문 마지막 부분에 data에 저장된 값과 change에 저장된 값을 더하고 2로 나눈 경우 0인지 1인지를 확인한다.

5. change의 크기가 곧 버튼이 눌린 횟수이므로 size()를 출력한다.

반응형