얼음녹차의 블로그
article thumbnail

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/120880

 

프로그래머스

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

programmers.co.kr

 

처음 작성한 코드

  • 정렬을 위해 리스트 numlist 안의 각 요소들에 같은 값을 빼준다.
    • n과 가까운 수를 찾기 위해 n을 빼주고 오름차순으로 정리할 것이다.
    • 0.1을 추가로 빼준것은 거리가 같은 값일 때 큰 값이 먼저 오게 하기 위함이다.
  • 뺄셈을 마친 요소들의 리스트는 전의 리스트 numlist와 쌍을 이루어 딕셔너리로 생성된다.
  • 키로 들어간 뺄셈 요소들을 기준으로 오름차순으로 정리하고 값들을 리스트로 출력하면 원하는 결과를 볼 수 있다.
def solution(numlist, n):
    numlist_sub = list(map(lambda x: abs(x - n - 0.1), numlist))
    numlist_dict = {string: numlist[i] for i, string in enumerate(numlist_sub)}
    numlist_dict_sorted = dict(sorted(numlist_dict.items()))
    return list(numlist_dict_sorted.values())

# 입출력 예시
print(solution([1, 2, 3, 4, 5, 6], 4))
print(solution([10000,20,36,47,40,6,10,7000], 30))

진료순서 구하기(https://ice-greentea.tistory.com/10)에서 딕셔너리를 이용한 순서정렬 방법을 이용하였다.

 

다른 코드

[코드1]

  • 정렬 시 key 조건을 이용하여 정리한 방법이다.
  • key에 조건을 리스트나 튜플의 형식으로 여러 개를 줄 수 있다.
    • 첫 번째 조건은 x와 n을 뺀 절댓값으로 n과 가까운 숫자를 순서대로 오름차순 정렬한다.
    • 두 번째 조건은 큰 숫자가 먼저 와야 하므로 -x를 이용해 x에 대해 내림차순 정렬한다.
def solution(numlist, n):
    return sorted(numlist,key = lambda x: [abs(x-n),-x])

딕셔너리를 사용하지 않고 이렇게 간단히 정렬을 할 수 있다니.. 꼭 알아두어야 할 방법이다.

profile

얼음녹차의 블로그

@PERIR

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!