반응형

https://www.acmicpc.net/problem/1138

 

1138번: 한 줄로 서기

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

www.acmicpc.net

 

해결 방법 : 구현

  • 문제 조건상, 주어진 arr의 인덱스가 키의 순서이므로, 앞으로 나올 사람의 키는 항상 현재 보다 큰 점을 이용하면 쉽게 해결 가능하다.
  • 자신 보다 큰 사람이 n명이어야 한다면, 현재 차례에서 빈 공간을 n개 만들고 다음 빈공간에 위치하면 된다! 
  •  
import sys
input = sys.stdin.readline

def solution(N, arr):
    answer = [None] * N

    for i, n in enumerate(arr):
        cnt = idx = 0

        while True:
            if answer[idx] == None: # 빈 공간 
                if cnt == n: # 지나온 None의 개수가 n인 경우, 현재 공간에 삽입 
                    break
                cnt += 1 # 빈 공간++
            idx += 1

        answer[idx] = str(i + 1)

    return ' '.join(answer)


if __name__ == '__main__':
    N = int(input())
    arr = list(map(int, input().split()))
    result = solution(N, arr)
    print(result)
반응형

'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글

백준 9204 : 체스  (0) 2021.08.07
백준 2606 : 바이러스  (0) 2021.08.07
백준 1058 : 친구  (0) 2021.08.03
백준 1005 : ACM Craft  (0) 2021.07.31
백준 1135 : 뉴스 전하기  (0) 2021.07.30

+ Recent posts