๐ŸŽฏ Coding Test

[๋ฐฑ์ค€] 1966 ํ”„๋ฆฐํ„ฐ ํ + ํ…Œ์ŠคํŠธ์ผ€์ด์Šค

์—ฐ_์šฐ๋ฆฌ 2022. 2. 11. 20:04
๋ฐ˜์‘ํ˜•

 

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

 

1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ

์—ฌ๋Ÿฌ๋ถ„๋„ ์•Œ๋‹ค์‹œํ”ผ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋ฆฐํ„ฐ ๊ธฐ๊ธฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์‡„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ ๋ช…๋ น์„ ๋ฐ›์€ ‘์ˆœ์„œ๋Œ€๋กœ’, ์ฆ‰ ๋จผ์ € ์š”์ฒญ๋œ ๊ฒƒ์„ ๋จผ์ € ์ธ์‡„ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์Œ“์ธ๋‹ค๋ฉด Queue ์ž๋ฃŒ๊ตฌ์กฐ์—

www.acmicpc.net

 

 

๋ฌธ์ œํ’€์ด

//์ค‘์š”๋„์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ง€์šฐ๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ฃจํ”„๋Œ๊ธฐ
์ด๋ถ€๋ถ„์„ ์ฒ˜์Œ์—” importmant++๋กœ ๋‘์—ˆ์„ ๋•Œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ์ž˜ ๋™์ž‘๋˜์–ด์„œ ์ œ์ถœํ–ˆ๋Š”๋ฐ

๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ (ArrayIndexOutOfBounds) ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค

 

๋””๋ฒ„๊ทธํ•ด๋ณด๋‹ˆ 9๊นŒ์ง€์ธ ์ค‘์š”๋„๊ฐ€ 10, 11 ๋กœ ์˜ฌ๋ผ๊ฐ€๊ณ ์žˆ์—ˆ๋‹ค

count++๋กœ ๊ณ ์น˜๋‹ˆ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค!

package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.Stack;

public class Main1966 {
    /*
    3           //ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ˆ˜
    1 0         //๋ฌธ์„œ์˜๊ฐœ์ˆ˜, ์ถœ๋ ฅ์ˆœ์„œ๊ฐ€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ๋Š” ํ˜„์žฌ ํ์˜ 0๋ฒˆ์งธ์— ์žˆ๋‹ค (=5๋ฒˆ๋ฌธ์„œ)
    5           //๋ฌธ์„œ์˜ ์ค‘์š”๋„
                //๊ฒฐ๊ณผ : 5๋ฒˆ์ด 1๋ฒˆ์งธ๋กœ ์ถœ๋ ฅ๋˜์—ˆ์œผ๋‹ˆ 1

    4 2         //๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜, ์ถœ๋ ฅ์ˆœ์„œ๊ฐ€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ๋Š” ํ˜„์žฌ ํ์˜ 2๋ฒˆ์งธ์— ์žˆ๋‹ค (=3๋ฒˆ๋ฌธ์„œ)
    1 2 3 4     //๋ฌธ์„œ์˜ ์ค‘์š”๋„ (์ตœ๋Œ€๊ฐ’ 4)
                //๋ฌธ์„œ ์žฌ๋ฐฐ์น˜ :  1, 2, 3, 4 ->                       //3๋ฒˆ ํ˜„์žฌ index๋Š” 2. ์ตœ๋Œ€๊ฐ’์ด 3์ด ์•„๋‹ˆ๋ฏ€๋กœ index--;
                                2, 3, 4, 1 ->                       //3๋ฒˆ ํ˜„์žฌ index๋Š” 1. ์ตœ๋Œ€๊ฐ’์ด 3์ด ์•„๋‹ˆ๋ฏ€๋กœ index--;
                                3, 4, 1, 2 ->                       //3๋ฒˆ ํ˜„์žฌ index๋Š” 0. index๊ฐ€ 0์ธ๋ฐ ์ตœ๋Œ€๊ฐ’์ด 3์ด ์•„๋‹ˆ๋ฏ€๋กœ index = queue.size-1;
                                4, 1, 2, 3 (4 ์ถœ๋ ฅ) -> (์ตœ๋Œ€๊ฐ’ 3)    //3๋ฒˆ ํ˜„์žฌ index๋Š” 3. ์ตœ๋Œ€๊ฐ’์ด 3์ธ๋ฐ index๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด index--;
                                1, 2, 3 ->                          //3๋ฒˆ ํ˜„์žฌ index๋Š” 2. ์ตœ๋Œ€๊ฐ’์ด 3์ธ๋ฐ index๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด index--;
                                2, 3, 1 ->                          //3๋ฒˆ ํ˜„์žฌ index๋Š” 1. ์ตœ๋Œ€๊ฐ’์ด 3์ธ๋ฐ index๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด index--;
                                3, 1, 2 (3 ์ถœ๋ ฅ)...                  //3๋ฒˆ ํ˜„์žฌ index๋Š” 0. ์ตœ๋Œ€๊ฐ’์ด 3์ธ๋ฐ index๊ฐ€ 0์ด๋ฉด result ์ถœ๋ ฅ
                //๊ฒฐ๊ณผ : 3๋ฒˆ์ด 2๋ฒˆ์งธ๋กœ ์ถœ๋ ฅ๋˜์—ˆ์œผ๋‹ˆ 2

    6 0         //๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜, ์ถœ๋ ฅ์ˆœ์„œ๊ฐ€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ๋Š” ํ˜„์žฌ ํ์˜ 0๋ฒˆ์งธ์— ์žˆ๋‹ค (=1-1๋ฌธ์„œ)
    1 1 9 1 1 1 //๋ฌธ์„œ์˜ ์ค‘์š”๋„ (์ตœ๋Œ€๊ฐ’ 9)     ๊ตฌ๋ถ„์„ ์œ„ํ•ด ๋ณ€๊ฒฝ : 1-1  1-2  9  1-3  1-4  1-5
                //๋ฌธ์„œ ์žฌ๋ฐฐ์น˜ :  1-1  1-2  9  1-3  1-4  1-5 ->                       //1-1๋ฒˆ ํ˜„์žฌ index๋Š” 0. index๊ฐ€ 0์ธ๋ฐ ์ตœ๋Œ€๊ฐ’์ด 1์ด ์•„๋‹ˆ๋ฏ€๋กœ index = queue.size-1;
                                1-2  9  1-3  1-4  1-5  1-1 ->                       //1-1๋ฒˆ ํ˜„์žฌ index๋Š” 5. ์ตœ๋Œ€๊ฐ’์ด 1์ด ์•„๋‹ˆ๋ฏ€๋กœ index--;
                                9  1-3  1-4  1-5  1-1  1-2 (9์ถœ๋ ฅ) -> (์ตœ๋Œ€๊ฐ’ 1)     //1-1๋ฒˆ ํ˜„์žฌ index๋Š” 4. ์ตœ๋Œ€๊ฐ’์ด 1์ธ๋ฐ index๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด index--;
                                1-3  1-4  1-5  1-1  1-2 (1-3์ถœ๋ ฅ) ->                //1-1๋ฒˆ ํ˜„์žฌ index๋Š” 3. ์ตœ๋Œ€๊ฐ’์ด 1์ธ๋ฐ index๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด index--;
                                1-4  1-5  1-1  1-2 (1-4์ถœ๋ ฅ) ->                     //1-1๋ฒˆ ํ˜„์žฌ index๋Š” 2. ์ตœ๋Œ€๊ฐ’์ด 1์ธ๋ฐ index๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด index--;
                                1-5  1-1  1-2 (1-5์ถœ๋ ฅ) ->                          //1-1๋ฒˆ ํ˜„์žฌ index๋Š” 1. ์ตœ๋Œ€๊ฐ’์ด 1์ธ๋ฐ index๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด index--;
                                1-1  1-2 (1-1์ถœ๋ ฅ)...                               //1-1๋ฒˆ ํ˜„์žฌ index๋Š” 0. ์ตœ๋Œ€๊ฐ’์ด 1์ธ๋ฐ index๊ฐ€ 0์ด๋ฉด result ์ถœ๋ ฅ
                //๊ฒฐ๊ณผ : 1-1๋ฒˆ์ด 5๋ฒˆ์งธ๋กœ ์ถœ๋ ฅ๋˜์—ˆ์œผ๋‹ˆ 5
    * */

    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int testcaseCount = scanner.nextInt();

        //ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต
        for (int i = 0; i < testcaseCount; i++) {
            int documentCount = scanner.nextInt();
            int targetDocIndex = scanner.nextInt();
            Queue<int[]> queue = new LinkedList<>();

            //๋ฌธ์„œ ์œ„์น˜, ์ค‘์š”๋„ ๋ฐฐ์—ด์— ์ €์žฅ
            int[] importantArr = new int[9];
            for (int j = 0; j < documentCount; j++) {
                int important = scanner.nextInt();
                queue.add(new int[]{ j, important });

                //์ค‘์š”๋„ ํšŸ์ˆ˜ ์ž…๋ ฅ
                importantArr[important-1] = importantArr[important-1] + 1;
            }

            int process = process(importantArr, queue, targetDocIndex);
            System.out.println(process);

        }

    }

    public static int process(int[] importantArr, Queue<int[]> queue, int targetDocIndex){
        //๋ช‡๋ฒˆ์งธ ์ถœ๋ ฅ์ธ์ง€
        int result = 0;

        //System.out.println("์ค‘์š”๋„ ๋“ฑ์žฅํšŸ์ˆ˜ : " + Arrays.toString(importantArr));

        //์ค‘์š”๋„ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜๋ณต
        for (int important=9; important > 0; important--) {

            //์ค‘์š”๋„ ๋“ฑ์žฅํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต
            for (int count = importantArr[important-1]; count > 0; count--) {
                //System.out.println("ํ˜„์žฌ ์ค‘์š”๋„ : "+important + ", ๋“ฑ์žฅํšŸ์ˆ˜ : "+count + ", " + print(queue));

                //ํ˜„์žฌ ์ค‘์š”๋„์™€ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ์ผ์น˜ํ•˜๋ฉด remove
                if(important == queue.peek()[1]){
                    result++;
                    //์ฐพ๋Š” ๋ฌธ์„œ์˜ ๋ฒˆํ˜ธ
                    if(targetDocIndex == queue.peek()[0]){
                        //System.out.println("*********** result : " + result);
                        return result;
                    }
                    queue.remove();

                }else{  //ํ˜„์žฌ ์ค‘์š”๋„์™€ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋’ค๋กœ ๋ณด๋‚ด๊ธฐ
                    queue.add(queue.poll());

                    //์ค‘์š”๋„์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ง€์šฐ๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ฃจํ”„๋Œ๊ธฐ
                    count++;

                }

            }

        }
        return 0;
    }


    public static String print(Queue<int[]> queue){
        StringBuilder sb = new StringBuilder();
        sb.append("queue : ");
        for (int[] o : queue) {
            sb.append(Arrays.toString(o)+", ");
        }
        return sb.toString();
    }

}
package util;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

public class TestScanInput {

    public static void ScanInput(String inputed){
        InputStream in = new ByteArrayInputStream(inputed.getBytes());
        System.setIn(in);
    }
    //์ด๋ ‡๊ฒŒ ์„ค์ •ํ•ด๋‘๋ฉด ์ž…๋ ฅ๊ฐ’์„ ์ •ํ•ด๋†“๊ณ  ํ…Œ์ŠคํŠธ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค!! ํ›จ์”ฌ ํŽธ๋ฆฌํ•จ
}
package baekjoon;

import org.junit.jupiter.api.Test;
import util.TestScanInput;

import java.io.IOException;

class Main1966Test {
    @Test
    void test1() throws IOException {
        TestScanInput.ScanInput("3\n" +
                "1 0\n" +
                "5\n" +
                "4 2\n" +
                "1 2 3 4\n" +
                "6 0\n" +
                "1 1 9 1 1 1");
        Main1966.main(new String[0]);
    }

    @Test
    void test2() throws IOException {
        TestScanInput.ScanInput("1\n" +
                "6 3\n" +
                "1 1 9 2 1 2");
        Main1966.main(new String[0]);
        /*
        1-1  1-2  9  2-1  1-3  2-2
        1-2  9  2-1  1-3  2-2  1-1
        9  2-1  1-3  2-2  1-1  1-2

        2-1  1-3  2-2  1-1  1-2
        * */
    }

    @Test
    void test3() throws IOException {
        TestScanInput.ScanInput("1\n" +
                "38 29\n" +
                "7 1 8 4 7 1 3 4 6 5 7 8 3 2 8 5 9 4 6 8 2 1 8 7 4 8 5 3 7 6 3 4 6 1 5 2 8 5");
        Main1966.main(new String[0]);
        //์ •๋‹ต 15
    }



}

 

๋ฐ˜์‘ํ˜•
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
  • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ