<내 코드>
N = int(input())
H = list(map(int, input().split()))
result = [0] * N
for i in range(N):
cnt_zero = 0
for j in range(N):
if cnt_zero == H[i] and result[j] == 0:
result[j] = i + 1 # 수 1 ~ N
break
elif(result[j] == 0):
cnt_zero += 1
print(*result)
입력 값으로 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. 그리고 줄을 선 순서대로 키를 출력하면 된다.
# result
# 입력: [2, 1, 1, 0]
[0, 0, 1, 0]
[0, 2, 1, 0]
[0, 2, 1, 3]
[4, 2, 1, 3]
차례대로 각자 왼쪽에 큰 사람이 몇 명인지를 0의 개수로 판단해서 자리에 넣어준다. 예를 들어 왼쪽에 2명이 있다 하면 결과값 배열에 [0, 0, 현재,...] 즉, 자신보다 큰 2명의 자리를 비워두고 자리에 들어가면 된다. 그렇게 되면 다음 사람은 앞전보다 큰 사람이기 때문에 앞사람 위치는 무시하고 자신보다 큰 사람 수와 0의 수만 같으면 그 자리에 들어가면 된다.
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 1260] DFS와 BFS - Python (그래프 탐색) (0) | 2020.08.30 |
---|---|
[백준 1783] 병든 나이트 - Python (그리디 알고리즘) (0) | 2020.08.28 |
[백준 2217] 로프 - Python (그리디 알고리즘, 정렬) (0) | 2020.08.28 |
[백준 10162] 전자레인지 - Python (그리디 알고리즘) (0) | 2020.08.27 |
[백준 1946] 신입 사원 - Python (그리디 알고리즘, 정렬) (0) | 2020.08.27 |