level : easy
Question:
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!
Example:
For a = [-1, 150, 190, 170, -1, -1, 160, 180], the output should be
sortByHeight(a) = [-1, 150, 160, 170, -1, -1, 180, 190].
My answer:
def sortByHeight(a):
f_a=list(filter(lambda x:x>0,a))
f_a.sort()
new_a=[]
j=0
for i in a:
if i==-1:
new_a.append(i)
else:
new_a.append(f_a[j])
j+=1
return new_a
- -1이 아닌 요소만 뽑아서 list 만들고 정렬
- 새로운 리스트에 원 리스트가 -1이면 복사하고 아니면 새로 정렬한 filter된 list에서 순서대로 복사
reference code:
def sortByHeight(a):
l = sorted([i for i in a if i > 0])
for n,i in enumerate(a):
if i == -1:
l.insert(n,i)
return l
- 비슷한 방법이지만 또 새로운 리스트를 생성해서 양쪽에서 복붙한게 아니라, 새로 필터링한 정렬 리스트에다가 -1 부분만 찾아서 insert
- list.inset(위치, 요소) : 원하는 위치에 요소를 추가해주는데 기존에 요소들은 뒤로 밀려난다
'Computer Science > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스][python] 12916. 문자열 내 p와 y의 개수 (0) | 2020.12.29 |
---|---|
[프로그래머스][python] 12912. 두 정수 사이의 합 (0) | 2020.12.29 |
[codesignal][python] 9. isLucky (0) | 2020.12.27 |
[codesignal][python] 8. commonCharacterCount (0) | 2020.12.27 |
[codesignal][python] 7. AllLongestStrings (0) | 2020.12.27 |