728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
"""
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다.
이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다.
정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터
가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
"""
def solution(numlist, n):
rank = sorted([[value, distance:=abs(value-n)] for value in numlist], key = lambda x: (x[1],-x[0]))
return [v[0] for v in rank]
"""
풀고 나서 다른 풀이를 보니 처리를 덜해도 되는 것 같다.
우선 내가 푼 방식을 단계별로 풀이해보면
1) [[value, distance:=abs(value-n)] for value in numlist]
numlist에서 value를 하나씩 가지고 와서 [value, distance]로 표현한다.
n이 3, value가 3이라면 [0, 0 (3-3)]이 된다.
2) sorted( '1)에서 나온 리스트', key = lambda x: (x[1],-x[0]))
이건 sort하는 방식이다. 보통 key = lambda x : 로 사용한다.
(x[1], -x[0])의 뜻은 먼저 x[1]을 기준으로 소트한다.
만약 x[1]이 같은 값이라면 그 다음 -x[0]을 기준으로 소트한다.
+와 -는 오름차순과 내림차순을 생각하면 된다.
3) return [v[0] for v in rank]
2번으로 소트를 하고 나면 거리순, value값으로 소트가 된다.
그러면 이제 차례대로 value를 가지고 리턴해주면 된다.
"""728x90
반응형
'개발 > 문제풀이' 카테고리의 다른 글
| 프로그래머스 '안전지대' 파이썬 풀이 (0) | 2023.02.16 |
|---|---|
| 프로그래머스 '소인수분해' 파이썬 풀이 (0) | 2023.02.16 |
| 프로그래머스 '최빈값 구하기' 파이썬 풀이 (0) | 2023.02.16 |
| 프로그래머스 '저주의 숫자 3' 파이썬 풀이 (0) | 2023.02.16 |
| 프로그래머스 '겹치는 선분의 길이' 파이썬 풀이 (0) | 2023.02.16 |
댓글