[Python 문제풀이] 7일차

2020. 7. 15. 11:0003. 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