내코드
def solution(numlist, n):
answer = sorted(numlist, key=lambda x: (abs(x - n), -x))
return answer
코드설명
- sorted() 함수와 key 매개변수를 사용하여 정렬 기준을 정의했습니다.
- key=lambda x: (abs(x - n), -x)는 두 가지 기준을 적용합니다:
- abs(x - n): 기준값 n과의 거리를 기준으로 정렬.
- -x: 거리가 같을 경우, 더 큰 숫자가 먼저 오도록 설정.
- 결과적으로, numlist의 요소들을 n과 가까운 순서대로 정렬한 뒤 반환합니다.
특징
- 간결함: 한 줄의 sorted()로 문제 해결.
- 복합 기준 처리: 튜플 (abs(x - n), -x)를 활용해 거리와 크기를 동시에 비교.
- 원본 유지: 정렬된 결과를 새로운 리스트로 반환하며, 입력 리스트는 변하지 않음.
다른 코드
def solution(numlist, n):
numlist_with_dist = [(x, abs(x - n)) for x in numlist]
numlist_with_dist.sort(key=lambda x: (x[1], -x[0]))
return [x[0] for x in numlist_with_dist]
코드설명
- 거리 계산 및 저장:
- 리스트 컴프리헨션을 사용해 각 숫자와 n 사이의 거리를 계산한 (x, abs(x - n)) 형태의 튜플을 생성.
- 예: numlist = [4, 1, 7, 3, 5], n = 5이면, [(4, 1), (1, 4), (7, 2), (3, 2), (5, 0)].
- 정렬:
- sort()를 사용해 (거리, 음수 값) 기준으로 정렬.
- 거리 오름차순 → 거리가 같으면 음수 값 기준으로 큰 값이 앞에 오도록 설정.
- 결과 추출:
- 정렬된 리스트에서 첫 번째 값만 추출해 최종 결과 리스트 반환.
특징
- 직관적 과정: 거리 계산과 정렬이 명확히 나뉘어 있어 이해하기 쉬움.
- 튜플 활용: 거리와 값을 함께 저장하고 활용.
- 약간의 추가 메모리 사용: 정렬을 위해 임시 리스트 생성.
두 코드 비교
- 코드 길이:
- 내 코드는 sorted()를 한 번 호출하는 방식으로 짧고 간결함.
- 다른 코드는 중간 리스트를 생성하여 비교적 길지만, 처리 과정이 명확함.
- 가독성:
- 내 코드는 한 줄로 정렬을 처리하므로 익숙하지 않은 경우 이해하기 어려울 수 있음.
- 다른 코드는 거리 계산과 정렬을 분리하여 초보자도 이해하기 쉬움.
- 효율성:
- 두 코드 모두 시간 복잡도는 O(n log n)으로 동일.
- 다만, 다른 코드는 추가적인 리스트를 생성하므로 약간의 메모리 오버헤드가 있음.
결론
- 간결함을 원한다면 내 코드가 적합.
- 가독성과 디버깅 편의성을 중시한다면 다른 코드도 좋은 선택.
- 두 코드 모두 정렬 기준을 정확히 구현하며, 상황에 맞게 선택할 수 있음.
'프로그래머스' 카테고리의 다른 글
프로그래머스 | Python | 연속된 수의 합 (2) | 2025.01.17 |
---|---|
프로그래머스 | Python | 다음에 올 숫자 (0) | 2025.01.17 |
프로그래머스 | Python | 문자열 밀기 (1) | 2025.01.15 |
프로그래머스 | Python | 유한소수 판별하기 (0) | 2025.01.13 |
프로그래머스 | Python | 등수 매기기 (0) | 2025.01.10 |