코딩테스트/백준

[Java] 백준 1764번 - 듣보잡

곰돌이볼 2023. 6. 10. 10:43

문제


 

  • 조건
    • 1 ≤ N ≤ 500,000
    • 1 ≤ M ≤ 500,000
    • 듣도 못한 사람들 중에 중복된 사람 X
    • 보도 못한 사람들 중에 중복된 사람 X

 

  • 입력
    • 첫번째 줄
      • N M : N - 듣도 못한 사람 수, M - 보도 못한 사람 수
    • 2 ~ (N+1)번째 줄
      • 듣도 못한 사람들의 이름
    • (N+2) ~ (N+M+2)번째 줄
      • 보도 못한 사람들의 이름

 

  • 출력
    • 듣도 보도 못한 사람의 수와 이름을 알파벳 순으로 출력하기

 

코드


  • 로직 1)
    • Map 이용해서 풀기
package backjoon;

import java.util.*;

// 듣보잡
public class No1764 {
    public static void main(String[] args) {
        // Map 사용
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();

       Map<String, Integer> map = new HashMap<>();
       List<String> list = new ArrayList<>();

       while(N-->0) {
           map.put(sc.next(), 1);
       }
       while(M-->0) {
           String name = sc.next();
           map.put(name, map.getOrDefault(name,0) +  1);
           if(map.get(name) == 2) list.add(name);
       }

       System.out.println(list.size());
       list.stream().sorted().forEach(System.out::println);
    }
}

 

  • 로직 2)
    • Set 이용해서 풀기
package backjoon;

import java.util.*;

// 듣보잡
public class No1764 {
    public static void main(String[] args) {
        // Set 사용
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();

        Set<String> set = new HashSet<>();
        List<String> list = new ArrayList<>();

        while(N-->0) {
            set.add(sc.next());
        }
        while(M-->0) {
            String name = sc.next();
            if(set.contains(name)) list.add(name);
        }

        System.out.println(list.size());
        list.stream().sorted().forEach(System.out::println);
    }
}

 

주의할 점 & 통과여부


  • 주의할 점
    • 처음에 Map과 Set이 아닌 List(ArrayList)를 구현해서 풀었지만 시간초과 발생
      • 원인 : 시간 복잡도 고려 X
      • List의 Contains()는 시간 복잡도가 O(N)이기 때문에 시간 초과 발생
      • 자세한 시간복잡도는 아래 링크 참고

 

  • 통과여부
    • 성공

 

 

'코딩테스트 > 백준' 카테고리의 다른 글

[Java] 백준 3020번 - 개똥벌레  (0) 2023.05.30
[Java] 백준 1823번 - 수확  (0) 2023.05.29
[Java] 백준 2473번 - 세 용액  (0) 2023.05.26
[Java] 백준 13164번 - 행복 유치원  (0) 2023.05.22
[Java] 백준 1092번 - 배  (0) 2023.05.20