나의 개발일지

[프로그래머스] Lv.0 가까운 수 [Python, 파이썬] 본문

프로그래머스

[프로그래머스] Lv.0 가까운 수 [Python, 파이썬]

YoonJuHan 2022. 12. 22. 13:28
나의 풀이
def solution(array, n):
    array.append(n)
    array.sort()
    if n == array[-1] :
        return array[-2]
    elif n == array[0] :
        return array[1]
    else :
        if array[array.index(n)+1] - array[array.index(n)-1] == 2:
            return array[array.index(n)-1]
        else :
            if array[array.index(n)] - array[array.index(n)-1] > array[array.index(n)+1] - array[array.index(n)] :
                return array[array.index(n)+1]
            else :
                return array[array.index(n)-1]
간단 설명
array = [15, 10, 11, 17]
n = 16 일때
  1. array에 n을 append → [15, 10, 11, 17, 16]
  2. array를 sort로 오름차순 정렬 → [10, 11, 15, 16, 17]
  3. if 문 :  n(16)이 array의 가장 뒤에 있으면 가장 뒤에서 두 번째 요소를 리턴
  4. elif 문 : n(16)이 array의 가장 처음에 있으면 가장 처음에서 두 번째 요소를 리턴
  5. else 문 :
    1. if 문 : n(16)이 지금 예제 처럼 [10, 11, 15, 16, 17] 끝이 아닌 요소들 사이에 위치하고 15, 17 둘 다 16과 가장 가까운 수 이므로 이럴 때는 더 작은 수인 15를 리턴, (양쪽의 큰 수(17)를 작은 수(15)로 뺐을 때 값이 2면 둘 다 16과 가장 가까운 수)
    2. else 문 : 
      1. if 문 : n에서 왼쪽 값을 뺀 값 > 오른쪽 값에서 n을 뺀 값을 비교해서 왼쪽이 크면 오른쪽 값 리턴(뺀 값이 크다는 것은 n과 크기 차이가 더 크다는 것, 가까운 수가 아님)
      2. else 문 : 아니면 왼쪽 값 리턴
Comments