๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm/Java][๋ฐฑ์ค€] 1700๋ฒˆ ๋ฉ€ํ‹ฐํƒญ ์Šค์ผ€์ค„๋ง

๋ฐ˜์‘ํ˜•

[BOJ] 1700๋ฒˆ ๋ฉ€ํ‹ฐํƒญ ์Šค์ผ€์ค„๋ง

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

๋ฌธ์ œ ์ ‘๊ทผ

์˜ˆ์ „์— ์šด์˜์ฒด์ œ ์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„์Šทํ•ด์„œ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
๋ฉ€ํ‹ฐํƒญ์— ์ž๋ฆฌ๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ์ด๋ฏธ ๊ฝ‚ํ˜€์žˆ์„ ๋•Œ๋Š” ๊ณ ๋ คํ•  ๊ฒƒ ์—†์ด ๊ทธ๋ƒฅ ๊ฝ‚๊ฑฐ๋‚˜ ๋„˜์–ด๊ฐ€๋ฉด ๋˜์ง€๋งŒ ์ž๋ฆฌ๊ฐ€ ์—†์„๋•Œ ๊ณ ๋ คํ•ด์•ผ ๋  ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ •๋ฆฌํ•ด ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ฉ€ํ‹ฐํƒญ์— ์ž๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
  2. ์ด๋ฏธ ๋ฉ€ํ‹ฐํƒญ์— ๊ฝ‚ํ˜€ ์žˆ๋Š” ๊ฒฝ์šฐ
  3. ๋ฉ€ํ‹ฐํƒญ์— ์ž๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
    3.1. ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ „์ž๊ธฐ๊ธฐ๊ฐ€ ๊ฝ‚ํ˜€ ์žˆ๋Š” ๊ฒฝ์šฐ
    3.2. ๋ชจ๋“  ์ „์ž๊ธฐ๊ธฐ๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ „์ž๊ธฐ๊ธฐ์ธ ๊ฒฝ์šฐ

์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ „์ž๊ธฐ๊ธฐ๊ฐ€ ๊ฝ‚ํ˜€ ์žˆ์œผ๋ฉด ๊ทธ ์ „์ž๊ธฐ๊ธฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ „์ž๊ธฐ๊ธฐ๋ฅผ ๊ฝ‚์œผ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.
๋ชจ๋“  ์ „์ž๊ธฐ๊ธฐ๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ „์ž๊ธฐ๊ธฐ์ธ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘์–ด์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒƒ์„ ์ œ๊ฑฐํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.
๋จผ์ € ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ „์ž๊ธฐ๊ธฐ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’๊ฒŒ ์„ค์ •ํ•ด์„œ ๊ฐ€์žฅ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ „์ž๊ธฐ๊ธฐ๋ฅผ ์ œ๊ฑฐํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

Code

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

public class BOJ1700 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        List<Integer> orders = new ArrayList<>();
        List<Integer> multitap = new ArrayList<>();
        int answer = 0;
        for(int i = 0; i<k; i++){
            orders.add(Integer.parseInt(st.nextToken()));
        }
        while(!orders.isEmpty()){
            int order = orders.remove(0);
            // ๋ฉ€ํ‹ฐํƒญ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ธ ๊ฒฝ์šฐ
            if(multitap.contains(order)) continue;
            // ๋ฉ€ํ‹ฐํƒญ์— ์ž๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
            if(multitap.size() < n){
                multitap.add(order);
            } else {
            // ๋ฉ€ํ‹ฐํƒญ์— ์ž๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
                boolean flag = false;
                int idx = -1;
                int maxIdx = -1;
                answer++;
                for(int i = 0; i<multitap.size(); i++){
                    if(!orders.contains(multitap.get(i))){
                        // ๋‹ค์‹œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ „์ž๊ธฐ๊ธฐ์ธ ๊ฒฝ์šฐ
                        flag = true;
                        multitap.remove(i);
                        multitap.add(order);
                        break;
                    } else {
                        if(orders.indexOf(multitap.get(i))> idx){
                        // ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ „์ž๊ธฐ๊ธฐ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ณ„์‚ฐ
                            idx = orders.indexOf(multitap.get(i));
                            maxIdx = i;
                        }
                    }
                }
                if(!flag){
                    // ๋ชจ๋“  ์ „์ž๊ธฐ๊ธฐ๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ „์ž๊ธฐ๊ธฐ์ธ ๊ฒฝ์šฐ
                    // ๊ณ„์‚ฐํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐ
                    multitap.remove(maxIdx);
                    multitap.add(order);
                }
            }
        }
        System.out.println(answer);
    }
}
๋ฐ˜์‘ํ˜•