Post

[인프런] 중복 확인

[인프런] 중복 확인

난이도

  • Easy

문제 설명

현수네 반에는 N명의 학생들이 있습니다.
선생님은 반 학생들에게 1부터 10,000,000까지의 자연수 중에서 각자가 좋아하는 숫자 하나 적어 내라고 했습니다.
만약 N명의 학생들이 적어낸 숫자 중 중복된 숫자가 존재하면 D(duplication)를 출력하고,
N명이 모두 각자 다른 숫자를 적어냈다면 U(unique)를 출력하는 프로그램을 작성하세요.

입력 형식

  • 첫 번째 줄에 자연수 N(5<=N<=100,000)이 주어진다.
  • 두 번째 줄에 학생들이 적어 낸 N개의 자연수가 입력된다.

출력 형식

  • “D” 혹은 “U”

예제 입력 및 출력

1
2
3
4
5
**예제 1:**
입력: 
8
20 25 52 30 39 33 43 33
출력: "D"

접근 방법

  • 값을 독립적으로 세기 위해 set에 담는다
  • 최초 기입한 횟수와 set에 담긴 길이와 비교하고, 적으면 중복값이 사라진 것임으로 “D” 아니면 “U”이다

시간 및 공간 복잡도

  • 시간 복잡도 : O(NlogN) : 입력 받은 원소들을 HashSet에 저장: O(N) + O(M)
  • 공간 복잡도 : O(N) : 집합에 저장

코드 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.*;

public class App {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Set<Integer> set1 = new HashSet<>();
        for (int i = 0; i < n; i++) {
            set1.add(sc.nextInt());
        }

        if (set1.size() < n) {
            System.out.println("D");
        } else {
            System.out.println("U");
        }

        sc.close();
    }
}

This post is licensed under CC BY 4.0 by the author.