728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120890#
내 풀이
def solution(array, n):
# 배열의 원소와 n 차이의 값을 담을 배열 diff
diff = []
# 주어진 배열을 오름차순 정렬한 배열(sort_arr) (이유: 가까운 수가 여러 개일 경우 더 작은 수를 return 해야함)
sort_arr = sorted(array)
for i in sort_arr:
# diff 배열에 원소와 n의 차이의 절댓값을 담음
diff.append(abs(i-n))
# diff 배열의 최솟값의 인덱스를 뽑아, 그 인덱스에 해당하는 sort_arr의 값을 return 함
return sort_arr[diff.index(min(diff))]
처음에는 배열을 정렬하는 코드를 쓰지 않고도 테스트 케이스가 모두 통과되었는데, 정답에서 2가지 실패가 나는 것을 확인했다.
따라서 아래와 같은 반례를 추가하여 오류를 개선해보았다.
array = [20, 10], n = 15 result -> 10
오류가 발생한 이유는 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 한다는 조건 때문이였는데,,
위의 반례를 확인해보면, 20과 10은 모두 주어진 수 n=15와 각각 5씩 차이가 난다.
이 때, 정렬을 하지 않고 차이의 최소값을 찾게 되면, min 함수는 앞에서부터 순서대로 원소를 찾으므로 20이 답으로 나오게 된다!
따라서 우리가 원하는 답은 더 작은 수인 10이므로 주어진 배열을 오름차순 정렬하여 문제를 푸는 것이 필요했다.
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 OX퀴즈 (0) | 2024.03.08 |
---|---|
[프로그래머스][PYTHON] Lv. 0 문자열 계산하기 (0) | 2024.03.06 |
[프로그래머스][PYTHON] Lv. 0 소인수분해 (0) | 2024.03.02 |
[프로그래머스][PYTHON] Lv. 0 합성수 찾기 (0) | 2024.03.02 |
[프로그래머스][PYTHON] Lv. 0 영어가 싫어요 (0) | 2024.02.29 |