[Python 문제풀이] 7일차
2020. 7. 15. 11:00ㆍ03. Resources/Python
728x90
반응형
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!
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
고민 흐름
# 테스트 케이스
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
반응형
'03. Resources > Python' 카테고리의 다른 글
[Python 문제풀이] 9일차 (0) | 2020.07.17 |
---|---|
[Python 문제풀이] 8일차 (0) | 2020.07.16 |
[Python 문제풀이] 6일차 (0) | 2020.07.14 |
[Python 문제풀이] 5일차 (0) | 2020.07.13 |
[Python 문제풀이] 4일차 (0) | 2020.07.12 |