JAVA/알고리즘

배열 중복 검사

lovineff 2021. 6. 7. 15:58

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

▣ 입력설명
첫 번째 줄에 자연수 N(5<=N<=100,000)이 주어진다.
두 번째 줄에 학생들이 적어 낸 N개의 자연수가 입력된다.
▣ 출력설명
첫 번째 줄에 D 또는 U를 출력한다.
▣ 입력예제 1
8
20 25 52 30 39 33 43 33
▣ 출력예제 1
D

 

// Java Stream 활용
private static String solutionByStream(int N, int[] arr){
    List<Integer> list = new ArrayList<>();
    for (int i : arr) { // int[] to list, Integer 타입이 아니므로 반복문을 통해 값 전달
        list.add(i);
    }

    List<Integer> distinctList = list.stream().distinct().collect(Collectors.toList());

    // 배열 사이즈 검사
    return list.size() == distinctList.size() ? "U" : "D";
}


// Java List 제공 함수 사용
private static String solutionByIterator(int N, int[] arr){
    List<Integer> list = new ArrayList<>();

    boolean duplicated = false;
    for (Integer i : arr) {
        if(!list.contains(i)){
            list.add(i);
        }else{
            duplicated = true;
            break;
        }
    }

    // 배열 사이즈 검사
    return duplicated ? "D" : "U";
}

public static void main(String[] args) {
    int N = 8;
    int[] arr = new int[]{1, 2, 3, 4, 5, 2};

    System.out.println("solutionByStream > " + solutionByStream(N, arr));
    System.out.println("solutionByIterator > " + solutionByIterator(N, arr));
}

 

 

 

'JAVA > 알고리즘' 카테고리의 다른 글

좌표정렬  (0) 2021.06.08
철수 짝궁 번호 출력  (0) 2021.06.08
LSU 알고리즘  (0) 2021.06.07
공주 구하기  (0) 2021.06.02
쇠막대기 자르기 (괄호)  (0) 2021.06.02