<Algorithm> 81. 1764번 듣보잡
by BFine반응형
1. 1764번 듣보잡
문자열 문제, 푸는 방법이 여러개가 있을 것 같았다. 처음에 단순히 모두 비교를 했는데 시간초과가 나왔다.
500000가 모두 4999900까지 같고 뒤에만 다르면 500000*500000을 해야되는데 처음부터 문제를 정독하는 것이 중요한 것 같다.
바이너리서치를 생각하지 못한 것은 아직 많이 부족하다는 걸 다시 느끼게 되었다.
이 문제는 Map을 활용할 수 있는지에 대한 것이라고 생각된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; import java.util.StringTokenizer; /* * 바이너리 서치 * 다넣고 중복되는거 찾기 * Map 쓰기 * */ public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); Map<String, Integer> map = new HashMap<String, Integer>(); PriorityQueue<String> pq = new PriorityQueue<>(); ArrayList<String> ans = new ArrayList<>(); for(int i = 0; i < N ; i++) { map.put(br.readLine(),0); } for(int i = 0; i < M ; i++) { String str = br.readLine(); if(map.get(str) ==null) { }else { pq.add(str); } } System.out.println(pq.size()); while(!pq.isEmpty()) { System.out.println(pq.poll()); } } } /*import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); String[] no = new String[N]; String[] list = new String[M]; ArrayList<String> ans = new ArrayList<>(); for(int i = 0; i < N ; i++) { no[i] = br.readLine(); } for(int i = 0; i < M ; i++) { list[i] = br.readLine(); } Arrays.sort(no); Arrays.sort(list); for(int i = 0; i < M;i++) { if(Arrays.binarySearch(no,list[i])>=0) { ans.add(list[i]); } } System.out.println(ans.size()); for(int i = 0 ; i < ans.size(); i++) { System.out.println(ans.get(i)); } } } */ | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 83. 13458번 시험감독 (0) | 2018.09.24 |
---|---|
<Algorithm> 82. 3745번 오름세 (0) | 2018.09.12 |
<Algorithm> 80. 3986번 좋은 단어 (0) | 2018.09.09 |
<Algorithm> 79. 10988번 팰린드롬인지 확인하기 (0) | 2018.09.09 |
<Algorithm> 78. 15685번 드래곤커브 (0) | 2018.09.09 |
블로그의 정보
57개월 BackEnd
BFine