본문 바로가기

파이썬 알고리즘 풀이

31)역수열

문제

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

 

조건

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(3<=N<100)이 주어지고, 두 번째 줄에는 역수열이 숫자 사이에 한 칸의 공백을 두고 주어진다.

 

원래 수열을 출력합니다.

 

과정

1. 0으로 초기화된 빈 배열을 준비한다.

2. a[i]값은 i+1이라는 값의 앞에 i+1보다 큰 숫자가 존재해야 하는 개수다.

3. 빈 공간이 큰 숫자가 들어가는 위치이고 발견될 때 마다 a[i]값을 하나씩 줄여 a[i]값이 0이 됬다면 자리를 모두 확보했으니 그 다음 빈 공간에 i+1값을 넣어준다.

 

문제풀이

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):
            b[j]=i+1
            break
        elif b[j]==0:
            a[i]-=1

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

 

'파이썬 알고리즘 풀이' 카테고리의 다른 글

33)쇠막대기  (0) 2021.10.31
32)가장 큰 수  (0) 2021.10.31
30)증가수열 만들기  (0) 2021.10.31
29)침몰하는 타이타닉  (0) 2021.10.28
28)창고 정리  (0) 2021.10.27