Silver

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

알고리즘

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

AgSn 2024. 7. 3. 02:17
반응형

문제 및 링크

문제

N개의 정수가 주어진다. 이때, N개의 정수를 오름차순으로 정렬하는 프로그램을 작성하시오. 같은 정수는 한 번만 출력한다.

입력

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

출력

첫째 줄에 수를 오름차순으로 정렬한 결과를 출력한다. 이때, 같은 수는 한 번만 출력한다.

예제 입력 1 복사

10
1 4 2 3 1 4 2 3 1 2

예제 출력 1 복사

1 2 3 4


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

 

문제 접근

for문을 통해 중복을 제거하는 방안도 있으나, set함수를 통해 제거하는 방식을 사용해보았다.

 

set은 집합, 고유한 요소의 모음을 말한다. 

집합의 특징으로는

1. 순서가 지정되어 있지 않으며, 인덱스로 접근하지 못한다. 다음과 같이 반복문을 이용하여 접근해야 한다.

my_set = {3,5,1,2}
for s in my_set:
	print(s)

=> 3
=> 5
=> 1
=> 2

 

2. 중복을 허용하지 않는다.

이 특징을 사용하여 문제를 풀 것이다. 입력받은 수를 리스트로 만든 후 이를 set함수를 거치면 중복이 사라지고 고유한 수 하나만 남게 된다. 

이를 또 list()함수로 감싸주면 중복을 없앤 리스트가 나오게 된다.

따라서 이를 sort 해준다면 최종적으로 중복 없이 오름차순으로 정렬하게 된다!!

문제 코드

import sys; input=sys.stdin.readline
N = int(input())
k =list(map(int, input().split()))
k = list(set(k))
k.sort()

for x in k:
    print(x, end=' ')
반응형