1. ๋ฌธ์ ์ค๋ช ๐
์ต์ํ์ผ๋ก ํ๋ฌ๊ทธ ๋นผ๋ ํ์ ์ธ๋ผ! (๋ค์ ๊ฝ๋ ํ์๋ ์ธ์ง ๋ง๋ผ!)
2. ์ ๊ทผ ๋ฐฉ์ ๐๏ธ
KEY WORD
: GREEDY ALGORITHM
(0) ์ฌ์ ์ธํ
: ๋ฉํฐํญ์ ๋ํ๋ด๋ SET, ๊ฐ ์ ์ ๊ธฐ๊ธฐ์ ํ์ฌ ์กฐํ ์ค์ธ ์์น ๊ธฐ์ค ๊ฐ์ฅ ๊ฐ๊น์ด index๋ฅผ ๋ํ๋ด๋ QUEUE[์ ์๊ธฐ๊ธฐ ๋ฒํธ], ๋ช
๋ น ์์๋ฅผ ๋ํ๋ ORDER[]๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํํด๋๋ค.
(1) QUEUE[] ์ฑ์ฐ๊ธฐ
: ์์ ๋งํ๋ค์ํผ, index๋ ๊ฐ ๊ธฐ๊ธฐ์ ๋ฒํธ์ด๊ณ , ๋ฐฐ์ด๋ง๋ค ์์ ๋ง์ ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํ์๋ ํด๋น index ๋ฒํธ ๊ธฐ๊ธฐ๊ฐ ๋์จ index๋ฅผ ๋ง๋ ๋๋ง๋ ์ฝ์
ํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด, ํ์ front์๋ ๊ฐ์ฅ ์ฒ์ ์กฐ์ฐํ index๊ฐ ์ ํ ์์ ๊ฒ์ด๋ค.
(2) SET(๋ฉํฐํญ) ์ฑ์ฐ๊ธฐ
: ๋ฉํฐํญ์ ๋ํ๋ด๋ SET์ ์ฑ์ด๋ค. 0๋ถํฐ N๊น์ง ์งํํ๊ณ , ๋ง๋๋ ๊ฐ์ ์ง์ด๋ฃ๋๋ค. SET์ ์ฌ์ฉํ ์ด์ ๋ ๋ฒ์ ๋ด ์ค๋ณต๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ, ์๋์ผ๋ก ์ค๋ณต ์ ๊ฑฐ๋ฅผ ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
(3) ORDER [] ์งํ
: SET์ ๋ง์ง๋ง ์ฝ์
๊ฐ ์ดํ ๋ถํฐ ORDER์ ๋ด์ฉ์ ์์ํ๋ค. ํ์ฌ ์กฐํ ์ค์ธ ORDER[i]๋ฅผ now
๋ผ ํ ๋ ๋ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ง๋ ์ ์๋ค.
- (๊ฐ) ๋ฉํฐํญ์ด ๋น์ด ์๋๋ฐ, now๊ฐ ์ด๋ฏธ ๊ฝํ ์ ์ ๊ธฐ๊ธฐ ๋ฒํธ ์ผ ๋ : ๋์ด๊ฐ๋ค.
- (๋) ๋ฉํฐํญ์ด ๋น์ด ์๋๋ฐ, now๊ฐ ๊ฝํ์์ง ์๋ ์ ์ ๊ธฐ๊ธฐ ๋ฒํธ ์ผ ๋: ๊ฝ์ ๋ฃ๋๋ค.
set.add()
- (๋ค) ๋ฉํฐํญ์ด ๊ฐ๋ ์ฐจ ์๊ณ , ๋ฉํฐํญ์ ์ด๋ฏธ ๊ฝํ ์ ์ ๊ธฐ๊ธฐ ๋ฒํธ ์ผ ๋: ๋์ด๊ฐ๋ค.
- (๋ผ) ๋ฉํฐํญ์ด ๊ฐ๋ ์ฐจ ์์ผ๋, ๋ฉํฐํญ์ ๊ฝํ ์์ง ์์ ๋ฒํธ ์ผ ๋:
๋ง์ง๋ง ๊ฒฝ์ฐ์ ์๊ฐ ์ ์ผ ์ค์ํ๋ค. ์ด๋๋ ๋ฉํฐํญ์ ๊ฝํ ์๋ ์ ์ ๊ธฐ๊ธฐ ์ค, ๊ฐ์ฅ ๋จผ์ ๋ค์ ๋ง๋๋ index๊ฐ ์ ์ผ ๋จผ ๊ฐ์ ๋ฝ์๋ฒ๋ฆฌ๋ฉด ๋๋ค. ๋ง์ฝ ๋ฉํฐํญ์ ๊ฝํ ์๋ ์ ์ ๊ธฐ๊ธฐ ์ค ๋ค์์ผ๋ก ๋ค์ ๋ง๋๋ index๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ค์๋ถํฐ ์ธ ์ผ์ด ์๋ค๋ ๊ฒ์์ผ๋ก, ๊ทธ ๊ฐ์ ์ฐ์ ์ ์ผ๋ก ๋ฝ์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
(1) ๊ฝํ์๋ ๋ฒํธ ์ค์์ ๊ฐ์ฅ ๋จผ์ ๋ค์ ๋ง๋๋ index ์ค ์ ์ผ ๋จผ ๊ฐ์ ๋ฝ๋ ์ด์
๋จผ์ index ์ค ์ ์ผ ๋จผ ๊ฐ์ ๋ฝ๋ ์ด์ ๋ฅผ ๋ณด์.
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ฌ ๊ฝํ ์๋ ๊ธฐ๊ธฐ์ ๋ฒํธ๊ฐ 2 3์ด๊ณ , ํ์ฌ ๊ทธ ์ธ์ ์ซ์๋ฅผ ๋ง๋์ ๋ ์ค ํ๋๋ฅผ ๋บด์ผ ํ๋ค๊ณ ๊ฐ์ ํ์ ๋, 2์ ๋ค์ index๋ 5์ด๊ณ , 3์ ๋ค์ index๋ 10์ด๋ค.
ํ ์์ ์์ 2๋ฅผ ์กฐ์ฐํ K๋ก ๋ฐ๊พธ๋ฉด, index = 5์์ 2๋ก ๋ ๋ฐ๊ฟ์ค์ผ ํ๊ณ (K๋ฅผ ๋ค์ ๋ฐ๊พธ๋ , 3์ ๋ฐ๊พธ๋ ), ๋ง์ฝ 3์ 2๋ก ๋ฐ๊ฟจ๋ค๋ฉด, index = 10์์ ๋ค์ ๋ ์ค ํ๋๋ฅผ 3์ผ๋ก ๋ฐ๊ฟ์ผ ํ๋ค.
์ต์ ํ๋ฒ ์ต๋ 2๋ฒ์ ๋ฐ๊ฟ์ค์ผ ํ๋ค. ๋ฐ๋ฉด ๊ฝํ ์๋ ๊ฐ ์ค ๋ค์ index๊ฐ ๊ฐ์ฅ ๋จผ 3
์ K๋ก ๋ฐ๊ฟ์ค๋ค๋ฉด,
index = 5์์ 2๋ฅผ ์กฐ์ฐํ ๋, ์ด๋ฏธ ๊ฝํ ์์ผ๋ฏ๋ก ๋์ด๊ฐ๊ณ , index = 10์์ ๋ค์ ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋๊น ์ต๋ 1๋ฒ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค. ์ด์ฒ๋ผ ๊ฝํ ์๋ ๊ฐ ์ค ๋ค์์ผ๋ก ๋ง๋๋ ๋ฒํธ๊ฐ ๋จผ ๊ฐ์ ๋ฝ์๋ฒ๋ฆฌ๋ ๊ฒ ์ด๋์ด๋ค.
๋ ๋ฒ์งธ๋ก ๊ฝํ ์๋ ๊ฐ์ index ์ค ๊ฐ์ฅ ๋จผ์ ๋ง๋๋ ๊ฐ์ ๋น๊ต ๋์์ผ๋ก ์ผ๋ ์ด์ ๋ฅผ ๋ณด์.
3 14
1 4 3 2 5 4 3 2 5 3 4 2 3 4
์ฝ์
ํธ ๊ตฌ๋ฉ์ด 3๊ฐ์ด๋ฏ๋ก ์ด๊ธฐ์ ๊ฝํ ๊ธฐ๊ธฐ์ ๋ฒํธ๋ [1,4,3]
์ผ ๊ฒ์ด๋ค. ๋ง์ฝ์ ์์ ์์ ์
๋ ฅ์ ๊ณ์ฐํ ๋, ๊ฝํ ์๋ ๊ฐ ์ค ๊ฐ์ฅ ๋จผ์ ๋ง๋๋ index๊ฐ ์๋, ์ ์ฒด index ์ค ์ ์ผ ๋จผ ๊ฐ์ผ๋ก ๊ณ์ฐ ์ 4๊ฐ ํญ์ ์ ์ธ ๋๊ฒ ๋๋ค. ํ์ง๋ง 4์ ์ ์ผ ์ index๋ 5
๋ก 3๋ณด๋ค ๋จผ์ ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ฐ๋ผ์ ๊ทธ๋ ๊ฒ ๊ณ์ฐํ๋ฉด, ๋ถํ์ํ ์ฝ์
ํธ ๋ฝ๊ธฐ๊ฐ +1 ๋ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ด์ฒ๋ผ, ์ ์ฒด์์ ๋งจ ๋ค index์ ์์นํ๋ค๊ณ ํด์, ์ต์ ์ ํด๋ฅผ ๊ตฌํ์ง ๋ชปํ๋ ๋ฐ๋ก๊ฐ ์์ผ๋ฏ๋ก, ์ ์ผ ๊ฐ๊น์ด index ์ค ์ ์ผ ๋จผ ๊ธฐ๊ธฐ๋ฅผ ๋ฝ์ ๋ฒ๋ ค์ผ ํ๋ค.
3. ์ฝ๋ ์๊ฐ ๐
import java.io.*;
import java.util.ArrayDeque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
int answer = 0;
int N, K;
int [] orders;
Queue<Integer> [] indexes = new Queue[101];
HashSet<Integer> concept = new HashSet<>();
for (int i = 1; i < 101; i++) {
indexes[i] = new ArrayDeque();
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st= new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
orders = new int [K];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < K; i++) {
orders[i] = Integer.parseInt(st.nextToken());
if(i < N) concept.add(orders[i]);
else {indexes[orders[i]].add(i);}
}
for (int i = N; i < K; i++) {
int now = orders[i];
indexes[now].poll();
if(concept.contains(now)) continue;
if(concept.size() < N) {
concept.add(now);
continue;
}
int latest_v = 0;
int latest_i = 0;
for (int plug_in : concept){
if(indexes[plug_in].peek() == null) {
latest_v = plug_in;
break;
}
if(!indexes[plug_in].isEmpty() && indexes[plug_in].peek() > latest_i){
latest_i = indexes[plug_in].peek();
latest_v = plug_in;
}
}
concept.remove(latest_v);
concept.add(now);
answer++;
}
System.out.println(answer);
}
}
4. ๋ฐฐ์ด ๊ฒ๋ค ๐ฏ
๊ทธ๋ฆฌ๋๋ ๊ณจ๋ 1๋ ์ฝ๋ค. ์ ํ๋ง ์ธ์ฐ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.