포시코딩

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

자료구조알고리즘/문제풀이

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

포시 2023. 1. 7. 05:55
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120890

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

def solution(array, n):
    array.sort()
    answer = array[0]
    x = abs(n - array[0])
    for e in array:
        if x > abs(n - e):
            x = abs(n - e)
            answer = e
    return answer

answer = array[0]
x = abs(n - array[0])

위 두 값에 대해 초기값 세팅하고 들어가는게 중요하다.

 

다른 풀이

def solution(array, n):
    array.sort(key=lambda x: (abs(x-n), x-n))
    return array[0]

sort()의 인자로 전달할 수 있는 key=lambda를 사용해 푼 방법이다.

또한 정렬함수의 key=lambda의 계산식에서 두 번째 인자가 있으면

첫 번째 인자로 정렬한 값들에 대해 추가로 정렬해준다.

이로인해 가장 가까운 수가 여러 개일 때 더 작은 수를 리턴 할 수 있게 된다.

 

sorted()로 나타내면 아래와 같다.

def solution(array, n):
    return sorted(array, key=lambda x: (abs(x-n), x-n))[0]
728x90