가까운 수
문제 설명
정수 배열 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 ] 이런 테스트값도 있다고 생각을 해야합니다..!! (요것땜에 복잡쓰..ㅠ)
근데 제가 너무 어렵게 푼거였어요 보고 배울 풀이들이 넘 많네요
적어둔 것처럼 가장 이해하기 쉬운 코드를 보면 오름차순 정렬 후 리스트의 인덱스 값을 이용해 튜플의 키와 값을 가져오는것이 제일 나은 풀이인것같습니다.
'CodingTest > 프로그래머스 (미운영)' 카테고리의 다른 글
| [프로그래머스 Lv.0] 약수구하기 (2) | 2026.01.06 |
|---|---|
| [프로그래머스 Lv.0] 영어가 싫어요 (0) | 2025.08.10 |
| [프로그래머스 Lv.0] 대문자와 소문자 (0) | 2025.08.08 |
| [프로그래머스 Lv.0] 암호 해독 (0) | 2025.08.08 |
| [프로그래머스 Lv.0] 369게임 (0) | 2025.08.07 |