문제
N개의 정수가 주어진다. 이때, N개의 정수를 오름차순으로 정렬하는 프로그램을 작성하시오.
같은 정수는 한 번만 출력한다.
입력
첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다.
이 수는 절댓값이 1,000보다 작거나 같은 정수이다.
출력
첫째 줄에 수를 오름차순으로 정렬한 결과를 출력한다. 이때, 같은 수는 한 번만 출력한다.
풀이
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//BufferedReader의 .readLine()을 사용하면 값을 spacebar 로 구분하여 받을 수 없으므로, 런타임 에러가 발생한다.
// ** BufferedReader를 사용하려면 StringTockenizer를 활용하면 된다.
//따라서 Scanner의 .nextInt()를 사용함.
Scanner sc = new Scanner(System.in);
int cnt = sc.nextInt();
//중복값을 받지 않기위해 HashSet을 사용함.
HashSet<Integer> hashSet = new HashSet<Integer>();
for (int i=0; i < cnt; i++){
hashSet.add(sc.nextInt()); //입력 시 자동으로 중복값을 제거해줌.
}
//입력이 끝난 HashSet을 ArrayList로 담은 뒤, Collections.sort()를 이용하여 오름차순 정렬.
ArrayList<Integer> arrayList = new ArrayList<Integer>(hashSet);
Collections.sort(arrayList);
//동작 속도 향상을 위해 StringBuilder 사용.
StringBuilder sb = new StringBuilder();
for (int i : arrayList){
sb.append(i).append(" ");
}
System.out.println(sb.toString());
}
}
앞서 다른 문제에서 풀어냈던 오름차순 정렬 문제에 "중복제거"라는 옵션이 추가된 문제이다.
배열에 모든 입력을 받은 뒤, 중복된 값을 삭제하는 등의 데이터 가공 로직을 구현해서 풀어도 좋지만
나는 Java의 HashSet을 사용하여 문제를 해결하였다.
HashSet은 add()를 통해 입력을 받을 때 마다 중복값을 점검하고, 입력을 미연에 방지해주는 기능이 있다.
'Algorithm(PS)' 카테고리의 다른 글
[백준/Python] 문제 15654 - N과 M (5) (0) | 2022.07.03 |
---|---|
[Algorithm] BFS & DFS (0) | 2022.06.04 |
[백준/Java] 문제 10989 - 수 정렬하기 3 (0) | 2022.01.05 |
[백준/Java] 문제 2750 - 수 정렬하기 (0) | 2022.01.04 |
[백준/Java] 문제 14681 - 사분면 고르기 (0) | 2021.11.08 |