- 문제 : https://www.acmicpc.net/problem/1138
문제 이해
- arr로 각 인덱스들 앞에 해당 인덱스 값보다 큰 수가 몇 개 있는지에 대한 정보가 주어진다.
- 이제 그 순서에 맞춰서 숫자를 나열해야하는데, 방법은 다음과 같다.
- 작은 수부터 채워나가면 되는데, 큰 사람이 왼쪽에 몇 명 있어야 하는지 주어진 값만큼의 빈자리를 비워두고 다른 값을 채워나간다.
- 예시로, 2 1 1 0 으로 주어진 경우에 다음과 같은 과정으로 진행 된다.
0번 인덱스(1번) : 0 0 1 0 (왼쪽에 두명이 있으므로 2칸을 비워두고 자리를 채운다)
1번 인덱스(2번) : 0 2 1 0 (2번은 왼쪽에 자기보다 큰 값이 1개이므로)
2번 인덱스 (3번) : 0 2 1 3
3번 인덱스 (4번) : 4 2 1 3
- 주어진 배열 값을 순차적으로 진행하면서, 왼쪽에 0의 값을 센 다음 그 값과 배열 값이 같고, 정답 배열 값도 0이라면 정답 배열에 추가될 수 있다. 이때, 정답 배열에 (해당 인덱스 + 1 값)을 저장하면 된다
정답 풀이
n = int(input())
arr = list(map(int, input().split()))
answer = [0 for _ in range(n)]
for i in range(n):
count = 0
for j in range(n):
if count == arr[i] and answer[j] == 0:
answer[j] = i + 1
break
elif answer[j] == 0 : # count != arr[i]
count += 1
print(' '.join(map(str, answer)))
참고 블로그 : https://gudwns1243.tistory.com/31
'백준 > 구현' 카테고리의 다른 글
[구현/백준] 14503번 : 로봇 청소기 (0) | 2023.09.11 |
---|---|
[구현/백준] 20006번 : 랭킹전 대기열 (0) | 2023.09.08 |
[구현/백준] 2952번 : NBA 농구 (0) | 2023.09.03 |
[구현/백준] 1205번 : 등수 구하기 (0) | 2023.08.29 |
[구현/백준] 9017번 : 크로스 컨트리 (0) | 2023.08.21 |