본문 바로가기

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

@doyiya242025. 8. 10. 18:20

가까운 수

 

문제 설명

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100
  • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

입출력 예 설명

입출력 예 #1

  • 3, 10, 28 중 20과 가장 가까운 수는 28입니다.

입출력 예 #2

  • 10, 11, 12 중 13과 가장 가까운 수는 12입니다.

 

내가 작성한 코드  

def solution(array, n):
    differ_dict = {}

    for i in array:
        #차이(i-n)이 key값 
        differ = abs(i-n)
        
        #이미 딕셔너리안에 차이나는 숫자가 존재한다면,
        #기존 differ_dict[differ](value)와 현재 i를 비교해서 더 작은값으로 넣는다.
        if differ in differ_dict:
            if i < differ_dict[differ]:
                differ_dict[differ] = i
        #없으면 그냥 넣어
        else: differ_dict[differ] = i
        
    #딕셔너리 key(차이) 중에 가장 작은 걸 찾는다
    #min_differ = min(differ_dict.keys())
    return differ_dict[min(differ_dict.keys())]

-> 정말 정말 저 열심히 풀었는데.. dict써야지!! 신나게 나 똑똑한가봐!하면서 푼 아이에요.. 열심히풀었어요..

 

 내 코드 설명 

차이 계산 및 저장:
array의 각 숫자(i)와 기준 숫자(n)의 절대적인 차이(differ)를 계산합니다.(1)
이 differ를 **딕셔너리의 키(key)**로 사용하고, array의 해당 숫자(i)를 **값(value)**으로 저장합니다.(2)

동일한 차이 처리:
만약 이미 같은 차이(differ)를 가진 숫자가 딕셔너리에 있다면, 기존에 저장된 값과 현재 숫자를 비교하여 더 작은 숫자를 새로운 값으로 덮어씁니다.(3)
이 과정을 통해 거리가 같은 숫자들 중 가장 작은 값만 남게 됩니다.(4)

최종 결과:
모든 숫자를 확인한 후, 딕셔너리의 키(차이) 중에서 가장 작은 키를 찾아냅니다.(5)
이 가장 작은 키에 해당하는 값이 바로 n과 가장 가까운 숫자가 됩니다.(6)

 

 

 

 

 

 

다른 사람이 작성한 코드

solution=lambda a,n:sorted(a,key=lambda x:(abs(x-n),x))[0]
def solution(array, n):
    array.sort(key = lambda x : (abs(x-n), x-n))
    answer = array[0]
    return answer
#이 풀이가 가장 이해하기 쉬운 코드로 보임
def solution(array, n):
    return sorted([(abs(a - n), a) for a in array])[0][1]
def solution(array, n):
    answer = []
    m = 99999999
    array.sort()
    for a in array:
        # print(abs(a-n), m)
        if abs(a - n) < m:
            m = abs(a-n)
            answer = a
    return answer

-> 한마디로 표현 : 배신감

 

 

 

 

 

 

회고

정말정말정말 이해하기 제일 어려운 아이였다.모두들 이 문제를 푸실 경우에는 차이나는 값이 [ 2, 3, 4, 4, 3, 1 ] 이런 테스트값도 있다고 생각을 해야합니다..!! (요것땜에 복잡쓰..ㅠ)

 

근데 제가 너무 어렵게 푼거였어요 보고 배울 풀이들이 넘 많네요

적어둔 것처럼 가장 이해하기 쉬운 코드를 보면 오름차순 정렬 후 리스트의 인덱스 값을 이용해 튜플의 키와 값을 가져오는것이 제일 나은 풀이인것같습니다.

 

 

목차