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

2023. 3. 16. 16:18·Algorithm/프로그래머스
 

프로그래머스

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

programmers.co.kr

 

코드

def solution(numlist, n):
    answer =[] # n과의 거리를 저장할 리스트
    for i in numlist:
        answer.append(i - n)
    
    result = [] # 정렬한 배열
    # 거리가 n에 가까운 순으로 정렬, 절댓값이 같으면 양수(= 큰 값) 먼저
    for i in sorted(answer[:], key=lambda x:[abs(x), -x]): 
        result.append(numlist[answer.index(i)])

    return result

[1, 2, 3, 4, 5, 6]이라는 num_list가 주어지면 n=4를 기준으로 가까운 순으로 정렬하여 [4, 5, 3, 6, 2, 1]을 만들어야 하는 문제이다.

만약, n으로부터 거리가 같다면 큰 수를 먼저 배치한다. 예를 들어 4를 기준으로 거리가 같은 3과 5는 큰 수인 5를 먼저 배치하는 것이다.

 

n과의 거리를 먼저 알기 위해 answer 리스트에 거리를 저장하였다.

그다음 거리의 절댓값을 기준으로 작은 수부터 정렬해 주었다. 이때 -1과 1이 있으면 큰 값을 의미하는 1을 앞에 위치하게 해주어야 하므로 sort의 두 번째 key값으로 -x를 작성해 주었다.

 

그럼 n과의 거리가 원하는 대로 정렬되었기 때문에 정렬된 순으로 같은 인덱스에 위치한 numlist 값을 찾아 result에 append 해주면 된다.

num_list, answer, 정렬된 answer, result를 모두 출력해 직접 과정을 눈으로 보면 조금 더 이해하기가 쉽다.

 

 

다른 사람의 코드

def solution(numlist, n):
    result = sorted(numlist,key = lambda x : (abs(x-n), n-x))
    return result

내 코드를 보면서 너무 리스트를 많이 만든 게 아닐까 하는 생각이 계속 들었다.

역시나, 다른 사람의 코드를 보니 모든 과정을 한 줄로 나타내었다.

주어진 numlist를 바로 정렬하면 되는 것이다.

n과의 거리의 절댓값인 abs(x-n)에 대해 먼저 정렬을 하고 abs(n-x)가 같으면 n-x가 큰 값을 먼저 정렬한다.

반응형
저작자표시 (새창열림)
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 옹알이 (1) [파이썬 python]
  • 프로그래머스 | 등수 매기기 [파이썬 python]
  • 프로그래머스 | 유한소수 판별하기 [파이썬 python]
  • 프로그래머스 | 겹치는 선분의 길이 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (43)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 특이한 정렬 [파이썬 python]
상단으로

티스토리툴바