Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 파이썬
- 그리디
- 백준 1764 자바
- 2748 자바
- 10810 자바
- 자바
- IAM Identity Center
- 2798 자바
- 자바 2164
- 2346 풍선 터뜨리기
- 코딩테스트
- 자바 1003
- 백준
- 2164 자바
- dfs
- 28278 스택 2
- 10813 자바
- 데보션영 3기
- 1010 자바
- 백준 10866 자바
- IAM 사용자
- BFS
- 백준 28278 자바
- 자바 2346
- 자바 28278
- 티움투어
- 1764 자바
- 백준 2346 자바
- 자바 10866
- 10807 자바
Archives
- Today
- Total
자두의 데브로그
[자바] 백준 1764번 듣보잡 본문
https://www.acmicpc.net/problem/1764
[문제 이해]
듣도 못한 사람의 수 N, 보도 못한 사람의 수 M을 각각 입력 받고 String 배열 N과 M에 모두 속하는 사람의 수와 이름을 찾아서 출력하면 되는 문제였다.
[문제 풀이]
N만큼의 크기를 갖는 ArrayList와 M만큼의 크기를 갖는 ArrayList를 각각 만들어서 ArrayList에 있는 contains() 함수를 사용해서 함수 내에 있는 원소를 비교하면 될 줄 알았는데 시간 초과가 났다.. 찾아보니 HashSet의 contains() 함수를 사용해야 시간초과가 안난다고 해서 HashSet을 사용해서 문제를 풀었다.
- HashSet의 contains() = 시간복잡도 : O(1)
- ArrayList의 contains() = 시간복잡도 : O(n)
이러면 속도 차이가 날 수 밖에 .. 🥹 배열 문제도 좀 풀어보면서 감을 더 잡아야 될 것 같다 ..
import java.io.*;
import java.util.*;
public class Main {
public static int sum = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
HashSet<String> n_hash = new HashSet<>();
for(int i = 0; i < n; i++){
n_hash.add(br.readLine());
}
ArrayList<String> n_m = new ArrayList<>();
for(int i = 0; i < m; i++){
String m_arr = br.readLine();
if(n_hash.contains(m_arr)){ // HashSet의 contains()의 시간 복잡도 = O(1)
n_m.add(m_arr);
}
}
// for(int i = 0; i < m; i++){
// if(n_arr.contains(m_arr.get(i))){
// n_m.add(m_arr.get(i)); // ArrayList의 contains()의 시간 복잡도 = O(n)
// }
// }
n_m.sort(Comparator.naturalOrder());
bw.write(String.valueOf(n_m.size())+"\n");
for(int i = 0; i < n_m.size(); i++){
bw.write(n_m.get(i) + "\n");
}
bw.flush();
bw.close();
}
}
ArrayList를 사전순으로 정렬하는 것도 Comparator.naturalOrder()를 통해 할 수 있다는 걸 알게 되었다. 원래 자주 사용하던 Arrays.sort()는 int[]을 정렬할 때 사용한다.
'코딩테스트 > Java' 카테고리의 다른 글
[자바] 백준 2164번 카드2 (0) | 2024.07.16 |
---|---|
[자바] 백준 1003번 피보나치 함수 (0) | 2024.07.15 |
[자바] 백준 2798번 블랙잭 (0) | 2024.07.08 |
[자바] 백준 1010번 다리 놓기 (0) | 2024.07.04 |
[자바] 백준 10870번 피보나치 수 5, 2748번 피보나치 수 2 (0) | 2024.07.04 |