
2개의 배열이 각각 주어지고 그 안에서 공통된 것을 찾는 문제
트러블 슈팅 1
한줄에 공백으로 분리된 것을 읽어 올 때String ss = bufferedReader.readLine(); String[] parts = ss.split(" "); int see = Integer.parseInt(parts[0]); int listen = Integer.parseInt(parts[1]);읽고 배열로 반환 후 각각 읽어오기
트러블 슈팅 2 시간 초과
이렇게 각각 읽어오는 방식으로 했더니 시간초과가 났다.
1. HashSet 사용 -> 시간 단축
2. 이중 중첩문 지양하기
트러블 슈팅 3
HashSet 정렬하기
ArrayList로 바꾸고 Collection 메소드를 사용해서 정렬해야 하는데 너무 오랜만이라 까먹었다..
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.HashSet;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String ss = bufferedReader.readLine();
String[] parts = ss.split(" "); // 공백을 기준으로 분리
int see = Integer.parseInt(parts[0]); // 보도
int listen = Integer.parseInt(parts[1]); // 듣도
HashSet<String> set1 = new HashSet<>();
HashSet<String> result = new HashSet<>(); // 듣도 보도 못한
for (int i = 0; i < see; i++) {
set1.add(bufferedReader.readLine());;
}
for (int j = 0; j < listen; j++) {
String temp = bufferedReader.readLine(); // 임시 저장
if (set1.contains(temp)) {
result.add(temp);
}
}
ArrayList<String> answer = new ArrayList<>();
for (String s : result) { // 정렬 위해 변경
answer.add(s);
}
Collections.sort(answer);
System.out.println(answer.size());
for (String s : answer) {
System.out.println(s);
}
}
}