728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120880
풀이
처음에는 주어진 수(n)와의 거리를 계산하여 이리저리 정렬하고 인덱스를 통해 값을 가져오려 했다...
근데 생각보다 잘 풀리지 않아 다른사람의 풀이를 참고했는데, 놀라웠다!
def solution(numlist, n):
# 거리가 n에 가까운 순으로 정렬, 절댓값이 같으면 양수(= 큰 값) 먼저
answer = sorted(numlist,key = lambda x : (abs(x-n), -x))
return answer
파이썬의 sorted 내장함수를 사용해 주어진 리스트 numlist를 정렬한다.
이때 정렬할 기준을 key 값을 통해 지정해주는데,,
첫 번째 기준을 주어진 값(n)과 원소의 차이(abs(x-n)),
첫 번째 기준에서 동일한 값이면 두 번째 기준인 더 큰 값(-x)을 통해 값을 정렬한다.
즉, 첫 번째로 abs(x-n)으로 오름차순 정렬한다.
절댓값이 같으면 -를 붙여 더 큰 수를 앞에 오도록 한다.
ex) 5와 3일 때, 주어진 n=4라고 하면
5-4 = 1 / 3-4 = -1
절댓값은 둘 다 1로 동일하다.
원소에 (-)를 붙이면 -5, -3이 되어, -5가 더 작은 수가 된다. 따라서 5가 먼저 answer에 들어간다.
-> 거리가 같으면 더 큰 수가 앞에 위치해야하기 때문이다.
(sorted는 기본으로 오름차순 정렬이기 때문에 (-)를 통해 정렬하지 않으면 3->5로 정렬되게 된다. )
새로 알게된 점
💡 sorted(데이터, key)
: sorted 함수의 key 파라미터는 어떤 것을 기준으로 정렬할 것인가에 대한 기준이다.
sorted는 데이터를 정렬해주는 함수로 알고있다.
그런데 key 옵션이 있다는 점은 까먹고 있었다.
sorted 함수의 key 파라미터는 key 값을 기준으로 정렬해주는 파라미터이다.
느낀점
생각해보면 쉬운 풀이인데 문제를 풀 때는 잘 떠오르지 않는 것 같다.
더 열심히 연습해야겠다.
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 연속된 수의 합 (0) | 2024.04.02 |
---|---|
[프로그래머스][PYTHON] Lv. 0 다음에 올 숫자 (0) | 2024.04.02 |
[프로그래머스][PYTHON] Lv. 0 유한소수 판별하기 (1) | 2024.03.29 |
[프로그래머스][PYTHON] Lv. 0 치킨 쿠폰 (0) | 2024.03.25 |
[프로그래머스][PYTHON] Lv. 0 등수 매기기 (0) | 2024.03.20 |