백준/정렬

[백준] 10867 : 중복 빼고 정렬하기

믕비 2023. 4. 7. 19:07

https://www.acmicpc.net/problem/10867

 

10867번: 중복 빼고 정렬하기

첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

HashSet이라는 인터페이스 개념과 Iterator를 공부하게 됐다.

향상된 for문이라는 개념도 공부했음.

 

메모리 : 25008 KB

시간 : 336 ms

코드길이 : 840 B

 

[내 코드]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		
		int N = Integer.parseInt(br.readLine());
		HashSet<Integer> hashset = new HashSet<>();
		st = new StringTokenizer(br.readLine());
		for(int n = 0; n < N; n++) {
			//중복값은 저장되지 않음
			hashset.add(Integer.parseInt(st.nextToken()));
		}
		
		//HashSet을 ArrayList로 담기
		ArrayList<Integer> arrlist = new ArrayList<Integer>(hashset);
		//List 인터페이스의 Collection.sort의 시간복잡도는 최악도 O(Nlogn)이어서 Array의 sort보다 더 좋음
		Collections.sort(arrlist);
		
		//배열은 향상된 for문 사용 가능
		for(int i : arrlist) {
			sb.append(i).append(" ");
		}
		System.out.print(sb);
	}

}

 

1등코드

메모리 : 13568 KB

시간 : 100 ms

코드길이 : 1354 B

 

[상위권 코드]

import java.io.IOException;

public class Main {

    private static final int MAX = 1000;
    private static final int NUMBER_SIZE = MAX * 2 + 1;

    public static void main(String[] args) {
        int[] number = new int[NUMBER_SIZE];

        int n = readInt();
        for (int i = 0; i < n; i++)
            number[readInt() + MAX]++;

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < NUMBER_SIZE; i++)
            if (number[i] > 0) sb.append(i - MAX).append(' ');

        System.out.println(sb);
    }

    private static int readInt() {
        int c, n = 0;
        boolean isMinus = false;

        try {
            n = System.in.read() & 15;
            if (n > 9) {
                isMinus = true;
                n = 0;
            }
            while ((c = System.in.read()) > 32)
                n = (n << 3) + (n << 1) + (c & 15);
        } catch (IOException ignored) {}

        return isMinus ? -n : n;
    }
}

'백준 > 정렬' 카테고리의 다른 글

[백준] 1092 : 배 (JAVA)  (0) 2024.09.13
[백준] 2751 : 수 정렬하기 2  (0) 2023.04.07