JuSeok

1764번

문제

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

문제 해결 순서

  1. 처음엔 n, m 각각의 개수만큼 숫자를 저장하는 리스트를 생성해서 자바의 Contains클래스를 활용했다.
  2. 위 방법은 어떻게 써도 시간초과가 떠서 실패함.
  3. 2번째 방법으로 n + m 만큼 반복하며 하나의 리스트에 전부 저장한 후 리스트를 정렬.
  4. 정렬된 리스트를 돌며 i번째와 i + 1번째가 같다면 sb에 추가하고 count를 증가시켜줌.
  5. 위 방법은 통과했는데, 자바의 Contains는 그리 빠른 클래스가 아닌가보다. sort가 더 빠른듯.
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp[] = br.readLine().split(" ");
        ArrayList<String> arrayn = new ArrayList<>();
        StringBuffer sb = new StringBuffer();
        int n = Integer.parseInt(temp[0]);
        int m = Integer.parseInt(temp[1]);
        int count = 0;
        for (int i = 0; i < n + m; i++){
            String s = br.readLine();
            arrayn.add(s);
        }
        Collections.sort(arrayn);

        for (int i = 0; i < (n + m) - 1; i++){
            if (arrayn.get(i).equals(arrayn.get(i + 1))){
                sb.append(arrayn.get(i) + "\n");
                count++;
            }
        }

        System.out.println(count);
        System.out.print(sb);
    }
}

Tags