PythonCodeFight-Day7

Day_7

Intro.

Q12. Sort by Height

Some people are standing in a row in a park. There are trees between them which cannot be moved. Your task is to rearrange the people by their heights in a non-descending order without moving the trees. People can be very tall!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def sortByHeight(a):
IdxSet_minus1 = []

sort_a = []
cnt_minus1 = 0
cnt_sort = 0

for i in range(len(a)):
if a[i] == -1:
IdxSet_minus1.append(i)

b = sorted(a)
for i in range(len(IdxSet_minus1)):
b.pop(0)

for i in range(len(a)):
if cnt_minus1 < len(IdxSet_minus1):
if i == IdxSet_minus1[cnt_minus1]:
sort_a.append(-1)
cnt_minus1 += 1
else:
sort_a.append(b[cnt_sort])
cnt_sort += 1
else:
sort_a.append(b[cnt_sort])
cnt_sort += 1

return sort_a

고민 흐름

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 테스트 케이스
a = [-1, 150, 190, 170, -1, -1, 160, 180]

# -1인 인덱스를 저장할 공간
IdxSet_minus1 = []

# 새롭게 정렬한 값을 넣어줄 공간
sort_a = []

# 두 가지의 행렬을 비교해서 값을 넣을 것이기 때문에, 각 값의 인덱스
cnt_minus1 = 0
cnt_sort = 0

# '-1' 이 들어있는 위치의 인덱스를 모으기
for i in range(len(a)):
if a[i] == -1:
IdxSet_minus1.append(i)

# 주어진 케이스를 오름차순으로 정렬
b = sorted(a)

# 정렬한 케이스에서 -1 값 빼내기
for i in range(len(IdxSet_minus1)):
b.pop(0)

# 배열의 전체 길이만큼 반복
for i in range(len(a)):
# 만약, 넣어야하는 -1 이 남아있는 경우
if cnt_minus1 < len(IdxSet_minus1):
# 찾아둔 -1 의 인덱스 값인 경우
if i == IdxSet_minus1[cnt_minus1]:
sort_a.append(-1)
cnt_minus1 += 1
# 찾아둔 -1 의 인덱스 값이 아닌 경우
else:
sort_a.append(b[cnt_sort])
cnt_sort += 1
# -1 이 더이상 없는 경우
else:
sort_a.append(b[cnt_sort])
cnt_sort += 1