문제 링크: 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])
딕셔너리를 사용하지 않고 이렇게 간단히 정렬을 할 수 있다니.. 꼭 알아두어야 할 방법이다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Programmers][Python] 분수의 덧셈 (0) | 2023.03.08 |
---|---|
[Programmers][Python] 옹알이 (1) (0) | 2023.03.08 |
[Programmers][Python] 바탕화면 정리 (0) | 2023.03.06 |
[Programmers][Python] 외계어 사전 (0) | 2023.03.02 |
[Programmers][Python] 다음에 올 숫자 (0) | 2023.03.02 |