1764. 듣보잡 (S4)
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
2초 | 256 MB | 118259 | 50985 | 39795 | 41.462 % |
문제
김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.
듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.
출력
듣보잡의 수와 그 명단을 사전순으로 출력한다.
summary
듣보잡의 수와 그 명단을 사전순으로 출력
- 듣도 못한 사람(N)과 보도 못한 사람(M) 겹치는 사람찾기
- 사전 순으로 출력
strategy
배열로 이중 for문을 돌리면 시간초과.
- HashSet 에 '듣보 못한 사람' 문자열을 담는다. (listen)
- TreeSet 에 '보도 못한 사람' 과 '듣도 못한 사람' 모두 해당하는 사람 담는다. (see)
note
- N, M은 500,000 이하의 자연수
- 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하
import java.util.*;
import java.io.*;
public class Main {
static int N, M;
static Set<String> listen = new HashSet<>();
static Set<String> see = new TreeSet<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder answer = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
for(int n = 0; n < N; n++) {
listen.add(br.readLine());
}
for(int m = 0; m < M; m++) {
String name = br.readLine();
if(listen.contains(name)) see.add(name);
}
answer.append(see.size()).append("\n");
for(String person : see){
answer.append(person).append("\n");
}
System.out.println(answer);
}
}
문제 | 결과 | 메모리 | 시간 | 언어코드 | 길이 |
1764 | 맞았습니다!! | 25992 | 236 ms | Java 11 / 수정 | 968 |
MEMO
- HashSet 조회 시 시간 복잡도는 O(1) 이다.
- TreeSet 은 정렬돼서 담긴다.
'문제 풀이 > 백준' 카테고리의 다른 글
[JAVA 09] 13549. 숨바꼭질3 (1) | 2024.09.03 |
---|---|
[JAVA 07] 11723.플로이드 (1) | 2024.09.02 |
[JAVA05] 1620. 나는야 포켓몬 마스터 이다솜 (2) | 2024.08.31 |
[JAVA04] 2529. 부등호 (0) | 2024.08.30 |
[JAVA 03] 1697. 숨바꼭질 (0) | 2024.08.29 |