๋ฌธ์
13414๋ฒ: ์๊ฐ์ ์ฒญ
์ ๋ ฅ ๋ฐ์ดํฐ๋ ํ์ค ์ ๋ ฅ์ ์ฌ์ฉํ๋ค. ์ ๋ ฅ์ 1๊ฐ์ ํ ์คํธ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋๋ค. ์ ๋ ฅ์ ์ฒซ ๋ฒ์งธ ์ค์๋ ๊ณผ๋ชฉ์ ์๊ฐ ๊ฐ๋ฅ ์ธ์ K(1 โค K โค 100,000)์ ํ์๋ค์ด ๋ฒํผ์ ํด๋ฆญํ ์์๋ฅผ ๊ธฐ๋กํ ๋๊ธฐ๋ชฉ
www.acmicpc.net
ํ์ด
๋จผ์ ์ด ๋ฌธ์ ๋, ์๊ฐ ์ ์ฒญ์ ํ ํ์๋ค์ ์์๋๋ก ์๋ฃ๊ตฌ์กฐ์ ๋ฃ์ด์ผ ํ๋๋ฐ,
์ด๋ฏธ ๊ทธ ์๋ฃ๊ตฌ์กฐ์ ๋ค์ด๊ฐ ์๋ ํ์์ธ ๊ฒฝ์ฐ, ์ ์ผ ๋ท ์์๋ก ๋ค์ ์ง์ด๋ฃ์ด์ผ ํ๋ค.
์ด ์์ด๋์ด๋, ์ด ๋ฌธ์ ๋ฅผ ํธ๋ ๋๊ตฌ๋ ๋ ์ฌ๋ ธ์ํ ๋ฐ
์๊ฐ๋ณด๋ค ๊ฐ๋จํ๊ฒ ํ๋ฆด ์ค ์์๋๋ฐ ์๋์๋ค.
1๏ธโฃ map๊ณผ priority queue ์ฌ์ฉ
set์ ์ด์ฉํด์ ์ค๋ณต์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ง๋ง, ์๊ฐ ์ ์ฒญ ์์๋ฅผ ํ์ธํ ์ ์๋ค.
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < L; i++) {
String id = br.readLine();
if (map.containsKey(id)) {
map.remove(id);
map.put(id, i);
} else {
map.put(id, i);
}
}
๋ฐ๋ผ์, map์ ์ด์ฉํด์ ์๊ฐ ์ ์ฒญ ์์ ์ ๋ณด๊น์ง ํจ๊ป ๋ฃ์ ์ ์๋ค.
๊ทธ๋ ๊ฒ, map์ ์ด๋ฏธ ์๊ฐ ์ ์ฒญ ์ด๋ ฅ์ด ์๋ ํ์์ ๊ฒฝ์ฐ ์ญ์ ํ๊ณ ๋ค์ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
map์ ์์ ์ ๋ณด๋ฅผ ๋ฃ์์ง๋ง, ์ ๋ ฌ์ ๋ฐ๋ก ๋ถ๊ฐ๋ฅ ํ๋ฏ๋ก
map์ ์ ๋ ฅ๋ ์์์ ๋ฐ๋ผ ์ ๋ ฌํ๊ธฐ ์ํด, map์ ์๋ ์์๋ค์ ์์ฐจ์ ์ผ๋ก ์ฐ์ ์์ ํ์ ๋ฃ์๋ค.
๋จ, ์ฐ์ ์์ ํ์ ์ง์ด๋ฃ์ ๋ ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํด์ ์ ๋ ฌ ์กฐ๊ฑด๊ณผ ํจ๊ป ๊ตฌํํ๋ฉด ๋๋ค.
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int K = Integer.parseInt(input[0]), L = Integer.parseInt(input[1]);
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < L; i++) {
String id = br.readLine();
if (map.containsKey(id)) {
map.remove(id);
map.put(id, i);
} else {
map.put(id, i);
}
}
PriorityQueue<Student> pq = new PriorityQueue<>((a, b) -> a.idx - b.idx);
for (String s : map.keySet()) {
pq.offer(new Student(s, map.get(s)));
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < K; i++) {
if (!pq.isEmpty()) {
sb.append(pq.poll().id + "\n");
}
}
System.out.println(sb);
}
static class Student {
String id;
int idx;
public Student(String id, int idx) {
this.id = id;
this.idx = idx;
}
}
}
๊ฒฐ๊ณผ

2๏ธโฃ LinkedHashSet ์ฌ์ฉ
์ด ๋ฌธ์ ๋ฅผ ๋ ์ฝ๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ ์ฐพ์๋ณด๋ค๊ฐ ์ฒ์ ์๊ฒ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
set์ธ๋ฐ, ์์๋ฅผ ๋ณด์ฅํด์ฃผ๋ set์ด๋ผ๊ณ ํ๋ค.
๋ฐ๋ผ์, ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๊ณ ์์๋ค๋ฉด ์ ~~๋ง๋ก ์ฝ๊ฒ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
import java.io.*;
import java.util.*;
public class Main2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int K = Integer.parseInt(input[0]), L = Integer.parseInt(input[1]);
LinkedHashSet<String> set = new LinkedHashSet<>();
for (int i = 0; i < L; i++) {
String id = br.readLine();
if (set.contains(id)) {
set.remove(id);
set.add(id);
} else {
set.add(id);
}
}
StringBuilder sb = new StringBuilder();
for (String id : set) {
sb.append(id + "\n");
if (--K == 0) {
break;
}
}
System.out.println(sb);
}
}
๊ฒฐ๊ณผ

1๋ฒ ๋ฐฉ๋ฒ ๋ณด๋ค ๋ฐ๋ฅธ ์๊ฐ์ผ๋ก ํต๊ณผํ์๋ค.