알고리즘

[백준, 파이썬, 1138번] 한 줄로 서기

hminor 2023. 12. 26. 12:55

풀이

  • 해당 알고리즘에 대해 어떻게 접근해야할지에 대한 고민을 오래했지만
  • 잘 떠오르지 않아서 다른 분들의 풀이를 확인 후 조금씩 이해할 수 있었다.
  • 우선 가장 문제였던 부분이 아래와 같다.
    • 나의 키보다 큰 사람이 왼쪽에 입력 받은 수 만큼 있어야 하는 것.
    • 입력 받은 수가 같을 경우.
  • 그래서 다른 분들의 풀이를 참고하여 이해할 수 있었지만 
  • 해당 유형과 비슷한 문제들을 좀 더 풀어봐야 확실한 이해를 할 수 있을것 같다.
  • 우선 위 문제였던 부분에 대한 해결법으로는 
    • 조건식을 통해 cnt와 입력 받은 값이 같은지 그리고 result[j]의 값이 아직 채워지지 않았는지 확인.

 

import sys
input = sys.stdin.readline

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

for i in range(n):
    cnt = 0
    for j in range(n):
        if cnt == li[i] and result[j] == 0:
            result[j] = i+1
            break
        elif not result[j]: cnt += 1

print(*result)