BAEKJOON #1015 수열정렬

2020. 4. 7. 02:07개발노트

이 문제의 저작권은 BAEKJOON에 있습니다.

 

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

문제는 위 링크에서 확인할 수 있습니다.

 

#수열 정렬
#https://www.acmicpc.net/problem/1015

N = int(input())
arr = list(map(int, input().split()))
arr2 = sorted(arr)
temp = [False] * N
for i, a in enumerate(arr2):
    if a in arr:
        get_index = arr.index(a)
        if temp[get_index] is False:
            arr[get_index] = -1
            temp[get_index] = i

print(' '.join(map(str, temp)))

 

풀이

문제 설명이 조금 불친절한데 쉽게 풀어서 설명하자면 숫자 배열의 크기순서를 오름차순으로 출력하는 문제입니다.

예를 들면 1 0 1 0 1 이라는 숫자 배열이 있을 때 2 0 3 1 4 와 같이 출력합니다.

0과 1이 중복이지만 문제에서 제시한대로 사전순(앞의 숫자부터)으로 크기 순서를 증가시킵니다.

더 쉬운 예로 0 1 3 1 는 0 1 3 2 가 됩니다.

 

index 값을 찾을 때 중복된 값이 있으면 한 번 변경한 수를 다시 변경하게 되므로 N크기의 'False'로 이루어진 temp배열을 만들었습니다. 마찬가지로 한번 찾은 값을 다시 찾는 일이 없도록 arr배열의 값도 -1로 변경합니다.

 

temp의 get_index에 순서(i) 값을 삽입합니다.

아래는 변경되는 과정입니다.

#input
5
1 0 1 0 1
[False, 0, False, False, False] [1, -1, 1, 0, 1]
[False, 0, False, 1, False] [1, -1, 1, -1, 1]
[2, 0, False, 1, False] [-1, -1, 1, -1, 1]
[2, 0, 3, 1, False] [-1, -1, -1, -1, 1]
[2, 0, 3, 1, 4] [-1, -1, -1, -1, -1]
#output
2, 0, 3, 1, 4