J

[JAVA] BOJ ๋ฐฑ์ค€ 14891 ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋ณธ๋ฌธ

๐Ÿ”‘ Problem Solving/๐Ÿ’ป Samsung SW Expert

[JAVA] BOJ ๋ฐฑ์ค€ 14891 ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

snowball๐Ÿฐ 2023. 1. 29. 00:42

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

 

14891๋ฒˆ: ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

์ฒซ์งธ ์ค„์— 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ๋‘˜์งธ ์ค„์— 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ์…‹์งธ ์ค„์— 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ๋„ท์งธ ์ค„์— 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ƒํƒœ๋Š” 8๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , 12์‹œ๋ฐฉํ–ฅ๋ถ€ํ„ฐ

www.acmicpc.net

๋ฌธ์ œ

์ด 8๊ฐœ์˜ ํ†ฑ๋‹ˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด 4๊ฐœ๊ฐ€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ผ๋ ฌ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋˜, ํ†ฑ๋‹ˆ๋Š” N๊ทน ๋˜๋Š” S๊ทน ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์—๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ 1๋ฒˆ, ๊ทธ ์˜ค๋ฅธ์ชฝ์€ 2๋ฒˆ, ๊ทธ ์˜ค๋ฅธ์ชฝ์€ 3๋ฒˆ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” 4๋ฒˆ์ด๋‹ค.

์ด๋•Œ, ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ์ด K๋ฒˆ ํšŒ์ „์‹œํ‚ค๋ ค๊ณ  ํ•œ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ํšŒ์ „์€ ํ•œ ์นธ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. ํšŒ์ „์€ ์‹œ๊ณ„ ๋ฐฉํ–ฅ๊ณผ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด ์žˆ๊ณ , ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํšŒ์ „ํ•œ๋‹ค.

ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚ค๋ ค๋ฉด, ํšŒ์ „์‹œํ‚ฌ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ํšŒ์ „์‹œํ‚ฌ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ํšŒ์ „ํ•  ๋•Œ, ์„œ๋กœ ๋งž๋‹ฟ์€ ๊ทน์— ๋”ฐ๋ผ์„œ ์˜†์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๊ณ , ํšŒ์ „์‹œํ‚ค์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด A๋ฅผ ํšŒ์ „ํ•  ๋•Œ, ๊ทธ ์˜†์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด B์™€ ์„œ๋กœ ๋งž๋‹ฟ์€ ํ†ฑ๋‹ˆ์˜ ๊ทน์ด ๋‹ค๋ฅด๋‹ค๋ฉด, B๋Š” A๊ฐ€ ํšŒ์ „ํ•œ ๋ฐฉํ–ฅ๊ณผ ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

๋‘ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๋งž๋‹ฟ์€ ๋ถ€๋ถ„์€ ์ดˆ๋ก์ƒ‰ ์ ์„ ์œผ๋กœ ๋ฌถ์—ฌ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์—ฌ๊ธฐ์„œ, 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ–ˆ๋‹ค๋ฉด, 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” ๋งž๋‹ฟ์€ ๋ถ€๋ถ„์ด S๊ทน์œผ๋กœ ์„œ๋กœ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, ํšŒ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ณ , 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” 2๋ฒˆ์ด ํšŒ์ „ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ํšŒ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋ชจ์–‘์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์ƒํƒœ์—์„œ 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋ฉด, 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋˜๊ณ , 2๋ฒˆ์ด ํšŒ์ „ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, 3๋ฒˆ๋„ ๋™์‹œ์— ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. 4๋ฒˆ์€ 3๋ฒˆ์ด ํšŒ์ „ํ•˜์ง€๋งŒ, ๋งž๋‹ฟ์€ ๊ทน์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์ „ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ดˆ๊ธฐ ์ƒํƒœ์™€ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚จ ๋ฐฉ๋ฒ•์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ์ข… ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ๋‘˜์งธ ์ค„์— 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ์…‹์งธ ์ค„์— 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ๋„ท์งธ ์ค„์— 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ƒํƒœ๋Š” 8๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , 12์‹œ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. N๊ทน์€ 0, S๊ทน์€ 1๋กœ ๋‚˜ํƒ€๋‚˜์žˆ๋‹ค.

๋‹ค์„ฏ์งธ ์ค„์—๋Š” ํšŒ์ „ ํšŸ์ˆ˜ K(1 ≤ K ≤ 100)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ K๊ฐœ ์ค„์—๋Š” ํšŒ์ „์‹œํ‚จ ๋ฐฉ๋ฒ•์ด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ํšŒ์ „์‹œํ‚จ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๋ฒˆํ˜ธ, ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ๋ฐฉํ–ฅ์ด๋‹ค. ๋ฐฉํ–ฅ์ด 1์ธ ๊ฒฝ์šฐ๋Š” ์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด๊ณ , -1์ธ ๊ฒฝ์šฐ๋Š” ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด๋‹ค.

์ถœ๋ ฅ

์ด K๋ฒˆ ํšŒ์ „์‹œํ‚จ ์ดํ›„์— ๋„ค ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ ์ˆ˜์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ ์ˆ˜๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•œ๋‹ค.

  • 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 12์‹œ๋ฐฉํ–ฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 1์ 
  • 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 12์‹œ๋ฐฉํ–ฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 2์ 
  • 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 12์‹œ๋ฐฉํ–ฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 4์ 
  • 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 12์‹œ๋ฐฉํ–ฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 8์ 

์ฝ”๋“œ

์ „์ฒด ์ฝ”๋“œ

import java.util.*;
import java.io.*;
/*
 * ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ํšŒ์ „๋ฐฉํ–ฅ์„ ๊ตฌํ•˜์—ฌ 12์‹œ ๋ฐฉํ–ฅ ์œ„์น˜์— ๋”ฐ๋ผ ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
 * */

public class BOJ_14891 {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        String[] settings = new String[4]; // ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๊ทน(N, S)์„ ์ €์žฅํ•œ ๋ฐฐ์—ด
        for (int i = 0; i < 4; i++)
            settings[i] = sc.next(); // ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๊ทน ๋“ค์„ ๋ฐฐ์—ด์— ์ €์žฅ
        int k = sc.nextInt();
        for (int i = 0; i < k; i++) {
            int num = sc.nextInt();
            int vector = sc.nextInt(); // k๋ฒˆ์งธ ํšŒ์ „์€ num๋ฒˆ์งธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ vector ๋ฐฉํ–ฅ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
            int[] result = new int[4]; // result[i]์—๋Š” i๋ฒˆ์งธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ํšŒ์ „ ๋ฐฉํ–ฅ์ด ๋‹ด๊ฒจ์žˆ๋‹ค
            num--;
            result[num] = vector;
            for (int j = num - 1; j >= 0; j--) { // ํ˜„์žฌ๋ณด๋‹ค ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋“ค์˜ ๋ฐฉํ–ฅ ๊ฒฐ์ •
                if (settings[j].charAt(2) != settings[j + 1].charAt(6)) // ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๊ทน์ด ๋‹ค๋ฅด๋ฉด
                    result[j] = (-1) * result[j + 1]; // -1์„ ๊ณฑํ•ด ํšŒ์ „ ๋ฐฉํ–ฅ์„ ๋ฐ˜๋Œ€๋กœ(0์ธ ๊ฒฝ์šฐ 0์ด ์ €์žฅ๋จ)
                else
                    result[j] = 0; // ๊ทน์ด ๊ฐ™๋‹ค๋ฉด ํšŒ์ „ํ•˜์ง€ ์•Š์Œ
            }
            for (int j = num + 1; j < 4; j++) { // ํ˜„์žฌ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋“ค์˜ ๋ฐฉํ–ฅ ๊ฒฐ์ •
                if (settings[j].charAt(6) != settings[j - 1].charAt(2))
                    result[j] = (-1) * result[j - 1];
                else
                    result[j] = 0;
            }
            for (int j = 0; j < 4; j++)
                change_setting(settings, j, result[j]); // ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „ํ•ด์ค€๋‹ค.
        }
        int result = 0;
        for (int i = 0; i < 4; i++) {
            result += (settings[i].charAt(0) - '0') * Math.pow(2, i); // ์ ์ˆ˜ ๊ณ„์‚ฐ. N๊ทน์ธ ๊ฒฝ์šฐ settings๊ฐ’์ด 0์ด๋ฏ€๋กœ 0์ด ๋”ํ•ด์ง„๋‹ค.
        }
        System.out.println(result);
        sc.close();
    }

    static void change_setting(String[] s, int num, int vector) {
        /*
         * num๋ฒˆ์งธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ vector๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ๋’ค ๋ฐฐ์—ด์— ๋‹ค์‹œ ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜
         * 
         * parameter
         * String[] s : ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๊ทน์„ ์ €์žฅํ•œ ๋ฐฐ์—ด
         * int num : ํšŒ์ „ํ•  ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์œ„์น˜
         * int vector: ํšŒ์ „ ๋ฐฉํ–ฅ
         * 
         */

        String news = ""; // ํšŒ์ „ํ•œ ๋’ค ๊ทน์˜ ์œ„์น˜๋“ค์„ ๋‹ด์€ ๋ณ€์ˆ˜
        if (vector == 0)
            return; // ํšŒ์ „ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐ”๋กœ returnํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ๋น ์ ธ๋‚˜๊ฐ
        else if (vector == -1) {
            news = s[num].substring(1, 8);
            news += String.valueOf(s[num].charAt(0)); // ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ธ ๊ฒฝ์šฐ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๊ทน๋“ค์ด index ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ์”ฉ ๋ฐ€๋ฆฐ๋‹ค
        } else if (vector == 1) {
            news = String.valueOf(s[num].charAt(7));
            news += s[num]
Comments