개발인생/Altorithm

[알고리즘 기초 100제] 16. 중복된 수 제거하기

forri 2025. 3. 12. 19:01

✔️문제

- 1~100까지 숫자가 입력될 때 한번이라도 입력되었으면 출력하시오.
- 입력: 1 2 3 1 1 2 3 4 5 5
- 정답: 1 2 3 4 5


📍정답

package _16_removeNum;

public class Main_boolean {

  public static void main(String[] args) {

    boolean arr[] = new boolean[101];
    int inArr[] = new int[101];
    
    inArr[0] = 1;
    inArr[1] = 2;
    inArr[2] = 3;
    inArr[3] = 1;
    inArr[4] = 1;
    inArr[5] = 2;
    inArr[6] = 3;
    inArr[7] = 4;
    inArr[8] = 5;
    inArr[9] = 5;
    inArr[10] = 7;
    inArr[11] = 15;
    
    // 1 2 3 4 5 7 15

    for (int i = 0; i<=100; i++) {
        arr[inArr[i]] = true;
    }

    for(int i = 0; i<=100;i++) {
      if (arr[i]) {
        System.out.print(i+" ");    
      }
    }
      
  }
  
}
package _16_removeNum;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main2_HashSet {
    public static void main(String[] args) {
        int inArr[] = {1, 2, 3, 1, 1, 2, 3, 4, 5, 5, 7, 15}; // 초기 데이터

        Set<Integer> uniqueNumbers = new HashSet<>(); // 중복 없는 숫자를 저장할 Set

        for (int num : inArr) {
            uniqueNumbers.add(num); // 중복 자동 제거
        }

        List<Integer> sortedList = new ArrayList<>(uniqueNumbers);
        Collections.sort(sortedList); // 오름차순 정렬

        for (int num : uniqueNumbers) {
            System.out.print(num + " "); // 정렬되지 않은 중복 제거된 값 출력
        }
    }
}

 

Set은 중복을 자동으로 제거하는 자료구조(정렬x)
Set<Integer> uniqueNumbers = new HashSet<>();

오름차순 정렬
1) TreeSet 사용
         Set<Integer> uniqueNumbers = new TreeSet<>();
2) List<Integer>로 변환한 뒤 정렬
         List<Integer> sortedList = new ArrayList<>(uniqueNumbers); Collections.sort(sortedList);
package _16_removeNum;

import java.util.*;

public class Main3_split {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Set<Integer> uniqueNumbers = new TreeSet<>(); // 중복 제거 + 자동 정렬

        System.out.println("1~100까지 숫자를 입력하세요. (공백으로 구분, 엔터 입력 시 종료)");

        // 한 줄 입력받기
        String inputLine = scan.nextLine();
        scan.close();

        // 입력된 문자열을 공백 기준으로 나누어 숫자로 변환 후 저장
        String[] inputs = inputLine.split("\\s+"); // 여러 개의 공백도 하나로 처리
        for (String s : inputs) {
            try {
                int num = Integer.parseInt(s);
                if (num >= 1 && num <= 100) { // 1~100 범위 제한
                    uniqueNumbers.add(num);
                } else {
                    System.out.println(num + "는 범위를 벗어났습니다. (1~100 사이 숫자만 입력 가능)");
                }
            } catch (NumberFormatException e) {
                System.out.println(s + "는 숫자가 아닙니다. 숫자만 입력하세요.");
            }
        }

        // 정렬된 중복 없는 숫자 출력
        for (int num : uniqueNumbers) {
            System.out.print(num + " ");
        }
    }
}
- Scanner를 사용하여 사용자 입력을 한 줄(nextLine())로 받음
- split("\\s+")을 이용해 공백을 기준으로 숫자를 분리
- Integer.parseInt(s)로 숫자로 변환하고, Set<Integer>(TreeSet)에 저장
- 중복 제거 + 자동 정렬된 상태로 출력