BOJ/Python

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

띵지니어 2022. 6. 28. 23:56

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

 

1138번: 한 줄로 서기

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

www.acmicpc.net

 

 

내 답안

N = int(input())
x = list(map(int, input().split()))

d = [0] * N
for i in range(N):
    for j in range(N):
        if x[i] == 0 and d[j] == 0:
            d[j] = i + 1		# i 가 0 부터 시작하니 + 1을 해줌
            break
        elif d[j] == 0:
            x[i] -= 1
            
print(' '.join(map(str, d)))

 

x = 자기보다 큰 사람이 왼쪽에 몇명있는지 알고 있는 리스트

d = N 만큼 배열을 초기화 해준다. (원래의 수열을 알기위한 리스트)

예제 1로 설명을 하겠다.

N = 4
x = 2 1 1 0

코드를 스텝화 해서 보여주면

step1 )  i = 0, j = 0

 

step2 )  i = 0, j = 2

 

step3 )  i = 1, j = 0

 

step4 )  i = 1, j = 1


.
.
.
.

final step )  i = 3, j = 1

 

핵심은 for문의 i 가 0부터 오름차순으로 증가하고 있다는 것이다. 
즉 다음에 나오는 수가 무조건 전에 것 보다 크다는 말이다.