본문 바로가기

개발일지/TIL

TIL 23-04-16

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문 진입 

10점 받고 신나서 찍었다.

 알게 된 점

그동안 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