티스토리 뷰

728x90

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

 

1138번: 한 줄로 서기

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

www.acmicpc.net


  • 해설 : 

N명의 사람을 키순으로 줄 세우려 한다. 각 사람의 키는 1, 2, 3, 4 ··· 순으로 증가하게 주어진다.

또한, 사람들은 줄을 설 때 자기보다 키가 큰 사람이 자신의 왼쪽에 몇 명 있었는지만 기억하고 있다.

이 때, 주어진 조건으로 사람들을 줄 세우는 방법을 출력하는 문제이다.

 

 

 


  • 풀이 :

주어지는 배열은 사람들이 자신의 왼쪽에 자기보다 큰 사람이 몇 명 있었는지 기억하는 대이터이다. 이 데이터를 인덱스와 함께 가공하여 [사람의 키,왼쪽에 있는 키 큰 사람의 수] 의 형태로 만들어주었다.

정답을 넣을 배열을 미리 만들어놓은 후 이 배열의 0번째 인덱스부터 어떤 사람이 이 자리에 들어갈 수 있는지 비교하며 삽입해준다.  

 

 

 


  • 소스코드 : 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
people = int(input())
= input()
tall = x.split()
new_tall = []
for i in range(len(tall)):
    new_tall.append((i+1,int(tall[i])))
solve = [0 for i in range(people)]
cnt = 0
for i in range(len(new_tall)):
    for j in range(people):
        if solve[j] == 0:
            if cnt == new_tall[i][1]:
                solve[j] = i + 1
                cnt = 0
                break
            cnt += 1
for i in(solve):
    print(i,end=' ')
cs
320x100
댓글
© 2022 WonSeok, All rights reserved