문제
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 |