Post

[BaekJoon] 10867번 - 중복 빼고 정렬하기 [Java][C++]

[BaekJoon] 10867번 - 중복 빼고 정렬하기 [Java][C++]

문제 링크


1. 문제 풀이


중복을 제외하고 오름차순으로 정렬하는 문제로 주어진 수의 범위가 작다는 점에서 카운팅 정렬의 아이디어를 활용해 방문 체크로 어떤 수들이 존재하는지 체크해줬다. 수가 음수도 가능하므로 $-1000$ 이 인덱스 $0$ 에 위치할 수 있도록 인덱스 처리를 해줬다.


2. 코드


1. 풀이 [Java]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.*;
import java.util.*;

public class Main {

    static final int MAX = 1000;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        boolean[] visited = new boolean[MAX + 1 + MAX];

        int N = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            int x = Integer.parseInt(st.nextToken());
            visited[MAX + x] = true;
        }

        for (int i = 0; i < visited.length; i++) {
            if (visited[i]) {
                sb.append(i - MAX).append(" ");
            }
        }

        System.out.println(sb);
    }
}


2. 풀이 [C++]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <bits/stdc++.h>
using namespace std;

constexpr int MAX = 1000;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    vector<bool> visited(MAX + 1 + MAX);

    int n;
    cin >> n;

    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        visited[MAX + x] = true;
    }

    for (int i = 0; i < visited.size(); i++) {
        if (visited[i]) {
            cout << i - MAX << ' ';
        }
    }
}

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