1. 프로그래머스 입문 - 가까운 수
문제점
정수 배열 array와 정수 n이 매개변수로 주어질 때,
array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
# abs(), -를 하고 0에 가까운 값을 찾아라
# 여러개면 작은 수 return
# 초기값 설정
시도해 본 것들
def solution(array, n):
find_num = abs(array[0] - n)
answer = 0
for arr in array:
current_num = abs(arr - n)
if find_num > current_num:
find_num = current_num
answer = arr
return answer
arr - n의 절댓값으로 n과의 거리를 구하고 if문을 통해서 current_num의 크기가 작으면 find_num과 answer 갱신
print(solution([10, 11, 12, 13], 2))
다음과 같은 테스트 코드에서 가장 answer의 값이 0으로 출력
첫 번째 값이 가장 작은 경우 if문 진입이 불가능해서 answer 갱신이 안됨
def solution(array, n):
find_num = abs(array[0] - n)
answer = array[0]
for arr in array:
current_num = abs(arr - n)
print(current_num)
if find_num > current_num:
find_num = current_num
answer = arr
return answer
초기 answer값 설정
print(solution([12, 8, 9, 10, 13], 11)) # 10이 나와야함
이 테스트 코드 실행시 12와 10의 거리가 동일하지만 이미 find_num=2로 current_num=2가 되어도 if문 진입 불가
해결 방법
def solution(array, n):
# abs(), -를 하고 0에 가까운 값을 찾아라
# 여러개면 작은 수 return
# 초기값 설정, answer 초기 값 수정
# 값이 같을 때 작은 수 반영하도록 sort()로 if문 진입 처리
array.sort()
find_num = abs(array[0] - n)
answer = array[0]
for arr in array:
current_num = abs(arr - n)
if find_num > current_num:
find_num = current_num
answer = arr
return answer
sort()를 통해서 array 재배열 후 for문 진입
알게 된 점
그동안 answer나 find_num의 초기 값을 알고리즘 범위 밖의 99999999같은 숫자로 지정했는데 그럴 필요 없이 알맞게 설정할 수 있었다.
테스트 코드를 잘 만드는 것도 실력인 것 같다. 이게 없으면 현재 내 코드의 문제점이 무엇인지 알 수가 없다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-04-18 (1) | 2023.04.18 |
---|---|
TIL 23-04-17 (0) | 2023.04.17 |
TIL 23-04-15 (0) | 2023.04.15 |
TIL 23-04-14 (3) | 2023.04.14 |
TIL 23-04-13 (2) | 2023.04.13 |