백준 1764 - 듣보잡

류희수·2024년 12월 20일

코딩 테스트

목록 보기
5/5

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);
        }
    }
}
profile
자바를자바

0개의 댓글