고양이와 코딩

[프로그래머스] 가까운 수.py 본문

python

[프로그래머스] 가까운 수.py

ovovvvvv 2023. 4. 17. 20:26
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과 가장 가까운 수가 첫 번째 인덱스에 위치하게 된다 ^^

 

대략 머리에서 코드가 짜여진다 싶으면 뭐 말도 안되게 계속 틀리고... ㅜㅜ 결국 내가 모르는 무슨 기술(?)이 있나 싶어 검색을 해볼 수 밖에 없다....

그치만 이렇게 배워가고 까먹지 않으면 지식이 쌓이는 거겠지 ~^^