2023. 1. 3. 16:42ㆍcode/[프로그래머스] python
문제
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
❗제한사항❗
- 1 ≤ n ≤ 10,000
- 1 ≤ numlist의 원소 ≤ 10,000
- 1 ≤ numlist의 길이 ≤ 100
- numlist는 중복된 원소를 갖지 않습니다.
입출력 예
입출력 예 설명
입출력 예 #1
- 4에서 가까운 순으로 [4, 5, 3, 6, 2, 1]을 return합니다.
- 3과 5는 거리가 같으므로 더 큰 5가 앞에 와야 합니다.
- 2와 6은 거리가 같으므로 더 큰 6이 앞에 와야 합니다.
입출력 예 #2
- 30에서 가까운 순으로 [36, 40, 20, 47, 10, 6, 7000, 10000]을 return합니다.
- 20과 40은 거리가 같으므로 더 큰 40이 앞에 와야 합니다.
✔풀이
def solution(numlist, n):
answer = []
abs_num = []
for num in numlist:
abs_num.append(abs(n-num))
set_abs_num = set(abs_num)
abs_num=sorted(list(set_abs_num))
for i in abs_num:
final_list=[]
for num in numlist:
if i==abs(n-num):
final_list.append(num)
final_list.sort(reverse=True)
answer+=final_list
return answer
📝설명
numlist의 숫자를 하나씩 꺼내어 n과의 차이의 절댓값을 중복 없이 저장한 후, for문을 돌려야겠다고 생각했다.
이 때 절댓값을 for문으로 돌리고, 내부에 for문을 하나 더 생성하여 절댓값==n-numlist의 원소인 걸 찾아내어, final_list라는 빈 리스트에 저장한다.
같은 절댓값을 가진 수가 있을수도 있으니, 계속해서 내부 for문을 돌리고, 내부 for문이 끝나면 final_list를 큰 수 손으로 정렬한 후, answer에 더하는 걸 반복하면 답이 도출된다.
👑모범 답안
🔎numlist를 정렬한다....
어떻게 정렬하냐면, key를 기준으로 정렬한다.
key는 lambda를 이용했다.
오늘의 배운 점은 lambda에 2개 이상을 가지고 놀 수 있다.
처음에 절댓값을 설정해서, 작은 절댓값을 가질수록 앞에 오도록 했고, 만약 같은 절댓값을 가진다면, 큰 수를 앞에 두어야 하기 때문에 -x를 하여 -x가 작은 순으로 return 하게 했다.
👀느낀 점
: 설명 기깔났다. 찢었다. 남의 것만......
언젠간 내 코드가 맨 앞에 뜨는 날이 오길 ..
💻 문제 출처
'code > [프로그래머스] python' 카테고리의 다른 글
[코딩테스트 연습] K번째 수 (0) | 2023.01.03 |
---|---|
[코딩 테스트 연습] 음양 더하기 (0) | 2023.01.03 |
[코딩 테스트 연습 입문] 유한소수 판별하기 (0) | 2023.01.03 |
[코딩 테스트 연습 입문] 다음에 올 숫자 (0) | 2023.01.02 |
[코딩 테스트 연습 입문] 평행 (0) | 2023.01.02 |