Problem


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.


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].


Input/Output

  • [input] array.integer a

    If a[i] = -1, then the ith position is occupied by a tree. Otherwise a[i] is the height of a person standing in the ith position.

    Guaranteed constraints:
    5 ≤ a.length ≤ 15,
    -1 ≤ a[i] ≤ 200.

  • [output] array.integer

    Sorted array a with all the trees untouched.


Solution

def sortByHeight(a):

lst = sorted([i for i in a if i > 0])

err_lst = [i for i in range(len(a)) if a[i] == -1]


for i in err_lst:

lst.insert(i, -1)


return lst


*lst : Input 리스트의 값 중 0 이상인 값들을 정렬한 리스트를 저장한 변수입니다.

*err_lst : Input 리스트의 값이 -1인 값들의 인덱스 값을 저장한 변수입니다.


-1을 제외한 나머지 숫자들만 정렬하는 문제입니다.

-1을 제외한 숫자들을 sort() 함수를 통해 정렬하고, -1에 해당하는 인덱스 값을 나중에 삽입하는 방식으로 문제 해결이 가능합니다. 

'Programming > Algorithm' 카테고리의 다른 글

[Algorithm] alternatingSums  (0) 2018.02.26
[Algorithm] reverseParentheses  (0) 2018.02.20
[Algorithm] isLucky  (0) 2018.02.09
[Algorithm] commonCharacterCount  (0) 2018.02.09
[Algorithm] allLongestStrings  (0) 2018.02.09

+ Recent posts