알고리즘/코테

[백준 1700] 멀티탭 스케쥴링

kiwiiiv 2021. 12. 19. 22:12

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

 

1700번: 멀티탭 스케줄링

기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전

www.acmicpc.net

 

 

시간도 넉넉하고..

걍 정신똑바로차리고풀면되는문제!!!!

더 깔끔하고멋들어지게 풀고 싶었는데 걍 이게 최선인듯 하다.. ?

 

 

자리가 모두 차있을 때

1. 나중에 또다시 사용되지 않는 플러그를 뽑음

2. 제일 나중에 사용되는 플러그를 뽑음

 

 

 

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

public class Main{
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String input = br.readLine();
        int N = Integer.valueOf(input.split(" ")[0]);
        int K = Integer.valueOf(input.split(" ")[1]);

        int num=0;
        String[] order = br.readLine().split(" ");

        int count = 0;
        Set<Integer> tabs = new HashSet<>();        //현재 tab
        for (int i = 0; i < order.length; i++) {
            int removeIndex = -1;
            int removeValue = 0;
            int plugValue = Integer.valueOf(order[i]);

            if (!tabs.contains(plugValue)) {
                //마지막 plugValue
                if (i == order.length - 1)  count++;
                //insert
                else if (tabs.size() < N)   tabs.add(plugValue);
                else {
                    //exchange
                    Iterator it = tabs.iterator();
                    while (it.hasNext()) {
                        int index = order.length;     //out of range
                        int buf = (Integer) it.next();
                        for (int t = i + 1; t < order.length; t++) {
                            if (Integer.valueOf(order[t]) == buf) {
                                index = t;
                                break;
                            }
                        }
                        if (removeIndex < index) {
                            removeIndex = index;
                            removeValue = buf;
                        }
                    }
                    tabs.remove(removeValue);
                    tabs.add(plugValue);
                    count++;
                }
            }
        }
        System.out.println(count);
    }

}