고양이와 코딩
[프로그래머스] 가까운 수.py 본문
728x90
수학적 사고가 다 죽어버렸다
아무튼
문제
(망한)코드
def solution(array, n):
answer = array[0]
for i in range(len(array)-1):
if abs(n - array[i]) < abs(n - answer):
answer = array[i]
if abs(n - array[i+1]) < abs(n - answer):
answer = array[i+1]
return answer
이렇게 코드를 짜면 !
100점 만점에 88.9점을 받습니다.
그 이유는 바로
저도 잘 모르겠습니다... ㅋ(ㅎㅎ)
그리고 나서 알게된 lambda로 짠 코드 !
def solution(array, n):
array.sort(key = lambda x : (abs(x-n), x-n))
answer = array[0]
return answer
array.sort(key = lambda x : (abs(x-n), x-n)) 코드에서는 array 배열을 정렬하는데,
이때 key 매개변수를 사용해서 정렬 기준을 지정한다!
lambda x : (abs(x-n), x-n) 함수는 x 값을 입력으로 받아 (abs(x-n), x-n) 튜플을 반환한다.
abs(x-n)은 x와 n사이의 거리이고, x-n은 x와 n값의 차이다.
즉, (abs(x-n), x-n) 은 거리가 가까운 순서대로 정렬하고, 거리가 같은 경우 x-n의 값이 작은 순서대로 정렬하게 된다!
이렇게 정렬이 되면 array 배열에서 n과 가장 가까운 수가 첫 번째 인덱스에 위치하게 된다 ^^
대략 머리에서 코드가 짜여진다 싶으면 뭐 말도 안되게 계속 틀리고... ㅜㅜ 결국 내가 모르는 무슨 기술(?)이 있나 싶어 검색을 해볼 수 밖에 없다....
그치만 이렇게 배워가고 까먹지 않으면 지식이 쌓이는 거겠지 ~^^
'python' 카테고리의 다른 글
[프로그래머스] 인덱스 바꾸기.py (0) | 2023.04.20 |
---|---|
[프로그래머스] 3 6 9 게임 (0) | 2023.04.18 |
[프로그래머스] 컨트롤 제트.py (0) | 2023.04.15 |
[프로그래머스] 배열 회전시키기.py (따봉 gpt야 고마워!) (0) | 2023.04.10 |
[프로그래머스] 2차원으로만들기.py (0) | 2023.04.06 |