동캄의 코딩도장

프로그래머스 level0 [특이한 정렬] 파이썬 본문

코테/프로그래머스 level0

프로그래머스 level0 [특이한 정렬] 파이썬

동 캄 2023. 3. 5. 20:20

https://school.programmers.co.kr/learn/courses/30/lessons/120880

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#프로그래머스 특이한 정렬
def solution(numlist, n):
    answer = []
    numlist.sort(key=lambda x: (abs(n-x),(-x)))
    answer=list(map(int,numlist))
    return answer

파이썬 내장 함수를 이용하면 문제를 쉽게 해결할 수 있다. 하지만, 코딩 연습인 만큼 내장함수를 최대한 이용하지 않고 문제를 해결해보면...

#프로그래머스 특이한 정렬
def solution(numlist, n):
    answer = []
    numlist.sort()
    length=len(numlist)
    diff=100000
    for i in range(length):
        if diff>=abs(n-numlist[i]):
            diff=abs(n-numlist[i])
            ind=i

    answer.append(numlist[ind])
    front= ind-1
    back = ind+1
    while front>=0 and back < length:
        f_diff=n-numlist[front]
        b_diff=numlist[back]-n
        if b_diff<=f_diff:
            answer.append(numlist[back])
            back+=1
        else:
            answer.append(numlist[front])
            front-=1
    while front>=0:
        answer.append(numlist[front])
        front-=1     
    while back<length:
        answer.append(numlist[back])
        back+=1
    return answer

다음과 같다. 우선, 리스트를 정렬 후, n과 제일 가까운 인덱스를 찾고, 그리디하게 앞 뒤로 탐색하면서 answer에 추가하면 된다.