μ•Œκ³ λ¦¬μ¦˜/λ°±μ€€

[ λ°±μ€€ / BOJ 1244 ] μŠ€μœ„μΉ˜ 켜고 끄기 ( JAVA / μžλ°” )

KIMHYEYUN 2021. 10. 2. 18:12
λ°˜μ‘ν˜•

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

 

1244번: μŠ€μœ„μΉ˜ 켜고 끄기

첫째 μ€„μ—λŠ” μŠ€μœ„μΉ˜ κ°œμˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. μŠ€μœ„μΉ˜ κ°œμˆ˜λŠ” 100 μ΄ν•˜μΈ μ–‘μ˜ μ •μˆ˜μ΄λ‹€. λ‘˜μ§Έ μ€„μ—λŠ” 각 μŠ€μœ„μΉ˜μ˜ μƒνƒœκ°€ μ£Όμ–΄μ§„λ‹€. 켜져 있으면 1, 꺼져있으면 0이라고 ν‘œμ‹œν•˜κ³  사이에 빈칸이 ν•˜λ‚˜μ”©

www.acmicpc.net

 

문제


1λΆ€ν„° μ—°μ†μ μœΌλ‘œ λ²ˆν˜Έκ°€ λΆ™μ–΄μžˆλŠ” μŠ€μœ„μΉ˜λ“€μ΄ μžˆλ‹€. μŠ€μœ„μΉ˜λŠ” 켜져 μžˆκ±°λ‚˜ κΊΌμ ΈμžˆλŠ” μƒνƒœμ΄λ‹€. <κ·Έλ¦Ό 1>에 μŠ€μœ„μΉ˜ 8개의 μƒνƒœκ°€ ν‘œμ‹œλ˜μ–΄ μžˆλ‹€. ‘1’은 μŠ€μœ„μΉ˜κ°€ 켜져 μžˆμŒμ„, ‘0’은 κΊΌμ Έ μžˆμŒμ„ λ‚˜νƒ€λ‚Έλ‹€. 그리고 학생 λͺ‡ λͺ…을 λ½‘μ•„μ„œ, ν•™μƒλ“€μ—κ²Œ 1 이상이고 μŠ€μœ„μΉ˜ 개수 μ΄ν•˜μΈ μžμ—°μˆ˜λ₯Ό ν•˜λ‚˜μ”© λ‚˜λˆ„μ–΄μ£Όμ—ˆλ‹€. 학생듀은 μžμ‹ μ˜ 성별과 받은 μˆ˜μ— 따라 μ•„λž˜μ™€ 같은 λ°©μ‹μœΌλ‘œ μŠ€μœ„μΉ˜λ₯Ό μ‘°μž‘ν•˜κ²Œ λœλ‹€.

남학생은 μŠ€μœ„μΉ˜ λ²ˆν˜Έκ°€ μžκΈ°κ°€ 받은 수의 배수이면, κ·Έ μŠ€μœ„μΉ˜μ˜ μƒνƒœλ₯Ό λ°”κΎΌλ‹€. 즉, μŠ€μœ„μΉ˜κ°€ 켜져 있으면 끄고, κΊΌμ Έ 있으면 μΌ λ‹€. <κ·Έλ¦Ό 1>κ³Ό 같은 μƒνƒœμ—μ„œ 남학생이 3을 λ°›μ•˜λ‹€λ©΄, 이 학생은 <κ·Έλ¦Ό 2>와 같이 3번, 6번 μŠ€μœ„μΉ˜μ˜ μƒνƒœλ₯Ό λ°”κΎΌλ‹€.

여학생은 μžκΈ°κ°€ 받은 μˆ˜μ™€ 같은 λ²ˆν˜Έκ°€ 뢙은 μŠ€μœ„μΉ˜λ₯Ό μ€‘μ‹¬μœΌλ‘œ μ’Œμš°κ°€ λŒ€μΉ­μ΄λ©΄μ„œ κ°€μž₯ λ§Žμ€ μŠ€μœ„μΉ˜λ₯Ό ν¬ν•¨ν•˜λŠ” ꡬ간을 μ°Ύμ•„μ„œ, κ·Έ ꡬ간에 μ†ν•œ μŠ€μœ„μΉ˜μ˜ μƒνƒœλ₯Ό λͺ¨λ‘ λ°”κΎΌλ‹€. μ΄λ•Œ ꡬ간에 μ†ν•œ μŠ€μœ„μΉ˜ κ°œμˆ˜λŠ” 항상 ν™€μˆ˜κ°€ λœλ‹€.

μŠ€μœ„μΉ˜ λ²ˆν˜ΈμŠ€μœ„μΉ˜ μƒνƒœ

β‘  β‘‘ β‘’ β‘£ β‘€ β‘₯ ⑦ β‘§
0 1 0 1 0 0 0 1

<κ·Έλ¦Ό 1>

예λ₯Ό λ“€μ–΄ <κ·Έλ¦Ό 2>μ—μ„œ 여학생이 3을 λ°›μ•˜λ‹€λ©΄, 3번 μŠ€μœ„μΉ˜λ₯Ό μ€‘μ‹¬μœΌλ‘œ 2번, 4번 μŠ€μœ„μΉ˜μ˜ μƒνƒœκ°€ κ°™κ³  1번, 5번 μŠ€μœ„μΉ˜μ˜ μƒνƒœκ°€ κ°™μœΌλ―€λ‘œ, <κ·Έλ¦Ό 3>κ³Ό 같이 1λ²ˆλΆ€ν„° 5λ²ˆκΉŒμ§€ μŠ€μœ„μΉ˜μ˜ μƒνƒœλ₯Ό λͺ¨λ‘ λ°”κΎΌλ‹€. λ§Œμ•½ <κ·Έλ¦Ό 2>μ—μ„œ 여학생이 4λ₯Ό λ°›μ•˜λ‹€λ©΄, 3번, 5번 μŠ€μœ„μΉ˜μ˜ μƒνƒœκ°€ μ„œλ‘œ λ‹€λ₯΄λ―€λ‘œ 4번 μŠ€μœ„μΉ˜μ˜ μƒνƒœλ§Œ λ°”κΎΌλ‹€.

μŠ€μœ„μΉ˜ λ²ˆν˜ΈμŠ€μœ„μΉ˜ μƒνƒœ

β‘  β‘‘ β‘’ β‘£ β‘€ β‘₯ ⑦ β‘§
0 1 1 1 0 1 0 1

<κ·Έλ¦Ό 2>

μŠ€μœ„μΉ˜ λ²ˆν˜ΈμŠ€μœ„μΉ˜ μƒνƒœ

β‘  β‘‘ β‘’ β‘£ β‘€ β‘₯ ⑦ β‘§
1 0 0 0 1 1 0 1

<κ·Έλ¦Ό 3>

μž…λ ₯으둜 μŠ€μœ„μΉ˜λ“€μ˜ 처음 μƒνƒœκ°€ μ£Όμ–΄μ§€κ³ , 각 ν•™μƒμ˜ 성별과 받은 μˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. 학생듀은 μž…λ ₯λ˜λŠ” μˆœμ„œλŒ€λ‘œ 자기의 성별과 받은 μˆ˜μ— 따라 μŠ€μœ„μΉ˜μ˜ μƒνƒœλ₯Ό λ°”κΎΈμ—ˆμ„ λ•Œ, μŠ€μœ„μΉ˜λ“€μ˜ λ§ˆμ§€λ§‰ μƒνƒœλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯


첫째 μ€„μ—λŠ” μŠ€μœ„μΉ˜ κ°œμˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. μŠ€μœ„μΉ˜ κ°œμˆ˜λŠ” 100 μ΄ν•˜μΈ μ–‘μ˜ μ •μˆ˜μ΄λ‹€. λ‘˜μ§Έ μ€„μ—λŠ” 각 μŠ€μœ„μΉ˜μ˜ μƒνƒœκ°€ μ£Όμ–΄μ§„λ‹€. 켜져 있으면 1, 꺼져있으면 0이라고 ν‘œμ‹œν•˜κ³  사이에 빈칸이 ν•˜λ‚˜μ”© μžˆλ‹€. μ…‹μ§Έ μ€„μ—λŠ” ν•™μƒμˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. ν•™μƒμˆ˜λŠ” 100 μ΄ν•˜μΈ μ–‘μ˜ μ •μˆ˜μ΄λ‹€. λ„·μ§Έ 쀄뢀터 λ§ˆμ§€λ§‰ μ€„κΉŒμ§€ ν•œ 쀄에 ν•œ ν•™μƒμ˜ 성별, 학생이 받은 μˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. 남학생은 1둜, 여학생은 2둜 ν‘œμ‹œν•˜κ³ , 학생이 받은 μˆ˜λŠ” μŠ€μœ„μΉ˜ 개수 μ΄ν•˜μΈ μ–‘μ˜ μ •μˆ˜μ΄λ‹€. ν•™μƒμ˜ 성별과 받은 수 사이에 빈칸이 ν•˜λ‚˜μ”© μžˆλ‹€.

좜λ ₯


μŠ€μœ„μΉ˜μ˜ μƒνƒœλ₯Ό 1번 μŠ€μœ„μΉ˜μ—μ„œ μ‹œμž‘ν•˜μ—¬ λ§ˆμ§€λ§‰ μŠ€μœ„μΉ˜κΉŒμ§€ ν•œ 쀄에 20κ°œμ”© 좜λ ₯ν•œλ‹€. 예λ₯Ό λ“€μ–΄ 21번 μŠ€μœ„μΉ˜κ°€ μžˆλ‹€λ©΄ 이 μŠ€μœ„μΉ˜μ˜ μƒνƒœλŠ” λ‘˜μ§Έ 쀄 맨 μ•žμ— 좜λ ₯ν•œλ‹€. μΌœμ§„ μŠ€μœ„μΉ˜λŠ” 1, κΊΌμ§„ μŠ€μœ„μΉ˜λŠ” 0으둜 ν‘œμ‹œν•˜κ³ , μŠ€μœ„μΉ˜ μƒνƒœ 사이에 λΉˆμΉΈμ„ ν•˜λ‚˜μ”© λ‘”λ‹€.

풀이


κ°„λ‹¨ν•œ κ΅¬ν˜„λ¬Έμ œ ‼️

 

일일이 λ‹€ μ°Ύμ•„μ„œ 뒀집어쀬닀 πŸ‘©‍πŸ’»

μ½”λ“œ


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

public class Main_BOJ_1244_μŠ€μœ„μΉ˜μΌœκ³ λ„κΈ° {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer stringTokenizer;

        int N = Integer.parseInt(br.readLine());
        stringTokenizer = new StringTokenizer(br.readLine());
        int[] switches = new int[N+1];

        for(int i = 1; i < N+1 ; i++){
            int x = Integer.parseInt(stringTokenizer.nextToken());
            switches[i] = x;
        }

        int studentNum = Integer.parseInt(br.readLine());
        while(studentNum-- > 0){
            String[] str = br.readLine().split(" ");

            if(str[0].equals("1")){
                // 남학생
                int sNum = Integer.parseInt(str[1]);
                for(int i = sNum; i < N+1 ; i+=sNum){
                    switches[i] = switches[i] == 1 ? 0 : 1;
                }
            }
            else{
                // 여학생
                int sNum = Integer.parseInt(str[1]);
                int left = sNum-1;
                int right = sNum+1;

                while(left > 0 && right < N+1){
                    if(switches[left] == switches[right]){
                        left--;
                        right++;
                    }
                    else
                        break;

                }

                left = left <= 0 ? 1 : left+1;
                right = N < right ? N : right-1;

                for(int i = left ; i < sNum ; i++){
                    switches[i] = switches[i] == 1 ? 0 : 1;
                }

                for(int i = sNum ; i <= right ; i++){
                    switches[i] = switches[i] == 1 ? 0 : 1;
                }
            }
            for(int i = 1; i < N+1 ; i++){
                sb.append(switches[i]).append(" ");
                if(i%20 == 0)
                    sb.append("\n");
            }
    
            System.out.println(sb);
            sb = new StringBuilder();
        }

        // for(int i = 1; i < N+1 ; i++){
        //     sb.append(switches[i]).append(" ");
        //     if(i%20 == 0)
        //         sb.append("\n");
        // }

        // System.out.println(sb);
    }
}

 

728x90
λ°˜μ‘ν˜•