Algorithm/Greedy

[Python] 백준 1138번 한 줄로 서기

코딩쪼앙 2023. 6. 16. 18:39

문제

 

1138번: 한 줄로 서기

첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다

www.acmicpc.net

입력

  • 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다. i는 0부터 시작한다.

출력

  • 첫째 줄에 줄을 선 순서대로 키를 출력한다.

입력 예제

4
2 1 1 0
5
0 0 0 0 0

출력 예제

4 2 1 3
1 2 3 4 5

문제 풀이

  • 이중 for문을 돌리면서, array[i]와 cnt 가 같고, 결과를 담을 리스트의 값이 0인 경우 리스트에 값을 넣는다.
  • cnt와 array[i]가 같지 않고, 리스트의 값이 0인 경우(리스트 값이 0인 경우, 현재보다 더 큰 수의 자리), 그 자리가 아니므로(왼 쪽에 큰 수가 더 있어야 함) 카운트 한 후, 다음 탐색을 진행한다.
  • 이 방식으로 result를 모두 채운 후, result의 모든 값을 출력한다.

코드

n = int(input())
result = [0] * n
array = list(map(int,input().split()))

for i in range(len(array)):
    cnt = 0
    for j in range(len(array)):
        if cnt == array[i] and result[j] == 0:
            result[j] = i + 1
            break
        elif result[j] == 0:
            cnt += 1
            
print(*result)