-
[백준] 14425 문자열 집합ALGORITHM/BOJ 2021. 2. 2. 22:57
2021-02-02
1. Trie
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;class TrieNode {public TrieNode next[]; // 다음 (자식) 노드public boolean isLast; // 문자열이 끝난지를 체크한다.TrieNode() {next = new TrieNode[26]; // 알파벳this.isLast = false;}}class Trie {TrieNode root;Trie() {root = new TrieNode();}public void insert(String word) {TrieNode node = root;for(int i = 0; i < word.length(); i++) {int ch = word.charAt(i) - 'a';if(node.next[ch] == null) node.next[ch] = new TrieNode();node = node.next[ch];}node.isLast = true;}public boolean contains(String word) {TrieNode node = root;for(int i = 0; i < word.length(); i++) {int ch = word.charAt(i) - 'a';if(node.next[ch] == null) return false;node = node.next[ch];}if(node.isLast) return true;return false;}}public class Main14425 {public static int N, M, answer;public static void main(String[] args) throws Exception {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));StringTokenizer st = new StringTokenizer(bf.readLine());N = Integer.parseInt(st.nextToken());M = Integer.parseInt(st.nextToken());answer = 0;Trie t = new Trie();for(int i = 0; i < N; i++) {st = new StringTokenizer(bf.readLine().trim());String str = st.nextToken();if(!t.contains(str)) t.insert(str);}for(int i = 0; i < M; i++) {st = new StringTokenizer(bf.readLine().trim());String str = st.nextToken();if(t.contains(str)) answer++;}System.out.println(answer);}}cs 2. Set
12345678910111213141516171819202122232425import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.HashSet;import java.util.Set;import java.util.StringTokenizer;public class Main14425_2 {public static int N, M, answer;public static void main(String[] args) throws Exception {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));StringTokenizer st = new StringTokenizer(bf.readLine());N = Integer.parseInt(st.nextToken());M = Integer.parseInt(st.nextToken());answer = 0;Set<String> set = new HashSet<>();for(int i = 0; i < N; i++) {set.add(new StringTokenizer(bf.readLine().trim()).nextToken());}for(int i = 0; i < M; i++) {if(set.contains(new StringTokenizer(bf.readLine().trim()).nextToken())) answer++;}System.out.println(answer);}}cs #문제풀이
Trie 자료구조를 공부하기 위해서 여러 블로그들을 검색해서 풀어봤다.
+) 찾아보니 Trie가 아니라 set이나 map으로 푼 사람들도 있길래 set으로도 한 번 제출해봤다.
아래 trie로 푼 것보다 set으로 푼게 훨씬 빠른 것을 볼 수도 있다.
'ALGORITHM > BOJ' 카테고리의 다른 글
[백준] 1561 놀이공원 (0) 2021.02.13 [백준] 5676 음주 코딩 (0) 2021.02.07 [백준] 1238 파티 (0) 2021.01.31 [백준] 1854 K번째 최단경로 찾기 (0) 2021.01.31 [백준] 1010 다리 놓기 (0) 2021.01.27