알고리즘/코테
[백준 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);
}
}