Published 2021. 10. 12. 11:41

역수열(그리디)

1부터 n까지의 수를 한 번씩만 사용하여 이루어진 수열이 있을 때, 1부터 n까지 각각의 수 앞에 놓여 있는 자신보다 큰 수들의 개수를 수열로 표현한 것을 역수열이라 한다.

 

예를 들어 다음과 같은 수열의 경우

4 8 6 2 5 1 3 7

 

1앞에 놓인 1보다 큰 수는 4, 8, 6, 2, 5 이렇게 5개이고,
2앞에 놓인 2보다 큰 수는 4, 8, 6 이렇게 3개,
3앞에 놓인 3보다 큰 수는 4, 8, 6, 5 이렇게 4개......

 

따라서 4 8 6 2 5 1 3 7의 역수열은 5 3 4 0 2 1 1 0 이 된다.

 

n과 1부터 n까지의 수를 사용하여 이루어진 수열의 역수열이 주어졌을 때, 원래의 수열을 출력하는 프로그램을 작성하세요.

 

▣ 입력설명

첫 번째 줄에 자연수 N(3<=N<100)이 주어지고, 두 번째 줄에는 역수열이 숫자 사이에 한칸의 공백을 두고 주어진다.

 

▣ 출력설명

원래 수열을 출력합니다.

 

▣ 입력예제 1

8
5 3 4 0 2 1 1 0

 

▣ 출력예제 1

4 8 6 2 5 1 3 7

 


코드

# 역수열
n = int(input())
a = list(map(int, input().split())) # 역수열
b = [0]*n # 원수열

for i in range(n):
    for j in range(n):
        if a[i]==0 and b[j]==0: # 빈공간 확보 and 그자리가 비어있음
            b[j] = i+1 # 자기 자리 찾아 들어감
            break
        elif b[j]==0:
            a[i] -= 1 

for x in b:
    print(x, end=' ')

'⏰ 코딩테스트 > 그리디' 카테고리의 다른 글

증가수열 만들기  (0) 2021.10.12
침몰하는 타이타닉  (0) 2021.10.09
창고 정리  (0) 2021.10.08
씨름 선수  (0) 2021.10.08
백준 알고리즘 - 1931 - 회의실 배정  (0) 2021.10.07
복사했습니다!