728x90
📚문제
📝풀이
def solution(numlist, n):
n_distance = {}
for idx, k in enumerate(numlist):
n_distance[idx,abs(k-n)] = k
sorted_n_distance = sorted(n_distance.items(), key=lambda x: (x[0][1],-x[1]))
result = [value for key,value in sorted_n_distance]
return result
머릿속에 있는 걸 구현하기 위해 Chat GPT의 도움을 조금 참고했다
numlist와 n을 입력받은 다음
numlist의 원소들 k 와 n의 차이의 절대값을 딕셔너리 형태로 저장
{(0, 3): 1, (1, 2): 2, (2, 1): 3, (3, 0): 4, (4, 1): 5, (5, 2): 6}
첫 번째 입출력을 예시로들면
(인덱스,n과의거리) : numlist원소의
형태로 나오게 된다
sorted_n_distance = sorted(n_distance.items(), key=lambda x: (x[0][1],-x[1]))
그 다음 n_distance.items()를 해주게 되면
딕셔너리의 형태가(키,값)의 형태로 변환된다
그리고 정렬기준(key)을 람다함수로 설정
x[0][1] => 키(인덱스,n과의거리) 중 n과의 거리를 선택하여 정렬
이 때, 만약 거리가 동일하다면
-x[1] => 값이 큰 순으로 정렬 ( x[1]은 값의 오름차순 )
(2차 기준을 어떻게 설정해야하나 고민했었는데
key에 값을 2번할당하거나, lambda식이 끝난 뒤에 설정해주는 것이 아니라 ( ) 안에 기준을 순서대로 작성)
[((3, 0), 4), ((4, 1), 5), ((2, 1), 3), ((5, 2), 6), ((1, 2), 2), ((0, 3), 1)]
마지막으로 value 값을 리스트 컴프리헨션으로 작성하여 결과값 도출
result = [value for key,value in sorted_n_distance]
return result
---------------------------------------------------
[4, 5, 3, 6, 2, 1]
728x90
'Python(알고리즘,문제풀이) > 프로그래머스(입문100제)' 카테고리의 다른 글
코딩테스트입문 / 옹알이(1) (permutations함수) (0) | 2023.08.07 |
---|---|
코딩테스트입문 / 등수 매기기 (0) | 2023.08.07 |
코딩테스트입문 / 유한소수 판별하기(소인수,최대공약수,return) (0) | 2023.08.05 |
코딩테스트입문 / 겹치는 선분의 길이 (0) | 2023.08.05 |
코딩테스트입문 / 평행 (0) | 2023.08.04 |