๐ [๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ ํ์ด] Q.1764 ๋ฃ๋ณด์ก ๋ฌธ์ ํ์ด
๐ ๋ฌธ์
https://www.acmicpc.net/problem/1764
๊น์ง์์ด ๋ฃ๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ๊ณผ, ๋ณด๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ์ด ์ฃผ์ด์ง ๋, ๋ฃ๋ ๋ณด๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฃ๋ ๋ชปํ ์ฌ๋์ ์ N, ๋ณด๋ ๋ชปํ ์ฌ๋์ ์ M์ด ์ฃผ์ด์ง๋ค.
์ด์ด์ ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ ๋ฃ๋ ๋ชปํ ์ฌ๋์ ์ด๋ฆ๊ณผ, N+2์งธ ์ค๋ถํฐ ๋ณด๋ ๋ชปํ ์ฌ๋์ ์ด๋ฆ์ด ์์๋๋ก ์ฃผ์ด์ง๋ค.
์ด๋ฆ์ ๋์ด์ฐ๊ธฐ ์์ด ์์ด ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ง๋ฉฐ, ๊ทธ ๊ธธ์ด๋ 20 ์ดํ์ด๋ค. N, M์ 500,000 ์ดํ์ ์์ฐ์์ด๋ค.
โป ๋ฃ๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ์๋ ์ค๋ณต๋๋ ์ด๋ฆ์ด ์์ผ๋ฉฐ, ๋ณด๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
์ถ๋ ฅ
๋ฃ๋ณด์ก์ ์์ ๊ทธ ๋ช ๋จ์ ์ฌ์ ์์ผ๋ก ์ถ๋ ฅํ๋ค.
๐ ์ ๊ทผ๋ฒ
Q.1764 ๋ฃ๋ณด์ก ๋ฌธ์ ํ์ด์ ๋๋ค.
๋ฌธ์ ์์ ์ฃผ์ด์ง ์์์ฒ๋ผ
์ ๋ ฅ์ผ๋ก ๋ฃ๋ ๋ชปํ ์ฌ๋์ ์ด๋ฆ N๊ฐ
๋ณด๋ ๋ชปํ ์ฌ๋์ ์ด๋ฆ M๊ฐ๊ฐ ์ฃผ์ด์ง๋๋ค.
์ฌ๊ธฐ์ ๋ฃ๋ ๋ณด๋ ๋ชปํ ์ฌ๋์ ์ด๋ฆ์ ์์
ํด๋น ์ฌ๋์ ์ด๋ฆ์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ๊ฒ์ด ์ ๋ต์ ๋๋ค.
๊ฑฐ๊ธฐ๋ค ์ ๋ ฅ์์ ๋ฃ๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ๊ณผ ๋ณด๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ์ ์ค๋ณต์ด ๋์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ทธ๋ฅ N+M ๊ฐ์ ์ด๋ฆ๋ค์ ์ ๋ ฅ๋ฐ๊ณ
๋ ๋ฒ ์ ๋ ฅ๋ ์ด๋ฆ๋ค์ answerList์ ์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ ๋ฒ ์ ๋ ฅ๋ ์ด๋ฆ๋ค์ ์ฝ๊ฒ ํ๋ณํ๊ธฐ ์ํด
Set์ ์ด์ฉํ์ต๋๋ค.
Set์ ์กด์ฌํ์ง ์๋ ์ด๋ฆ์ด๋ผ๋ฉด ์ฒ์ ๋์จ ์ด๋ฆ์ด๋ฏ๋ก set์ ์ถ๊ฐํด์ฃผ๊ณ
๋ง์ฝ ์ด๋ฏธ set์ ์กด์ฌํ๋ ์ด๋ฆ์ด๋ผ๋ฉด ๋ ๋ฒ์งธ ๋์จ ์ด๋ฆ์ด๋ฏ๋ก
answerList์ ์ถ๊ฐํด์ค๋๋ค.
๊ทธ ํ answerList์ ํฌ๊ธฐ(์)์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋ answerList๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋์ ๋๋ค.
๐ป ์ฝ๋
package problem.string;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main_1181 {
static int N;
static List<String> wordList;
public static void main(String[] args) throws IOException {
input();
solve();
}
public static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
Set<String> wordSet = new HashSet();
for (int i = 0; i < N; i++) {
wordSet.add(br.readLine());
}
wordList = new ArrayList<>(wordSet);
br.close();
}
public static void solve() {
Collections.sort(wordList, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (s1.length() > s2.length()) {
return 1;
} else if (s1.length() == s2.length()) {
return s1.compareTo(s2);
} else
return -1;
}
});
for (int i = 0; i < wordList.size(); i++) {
System.out.println(wordList.get(i));
}
}
}