프로그래머스/파이썬_입문

가까운 수

싱싱한복초이 2024. 10. 28. 22:36

https://school.programmers.co.kr/learn/courses/30/lessons/120890

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

[문제 설명]

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요. 정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100
  • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

 

[나의 풀이]

def solution(array, n):
    # n과의 절대 차이를 저장할 리스트 a를 초기화
    a = [abs(i - n) for i in array]
    
    # 절대 차이가 최소인 값 찾기
    min_diff = min(a)
    
    # 가장 가까운 수를 찾고, 여러 개일 경우 더 작은 수 반환
    closest_numbers = [array[i] for i in range(len(a)) if a[i] == min_diff]
    
    return min(closest_numbers)  # 가장 작은 값을 반환

챗지피티의 도움을 받아서 완성된 나의 코드

나의 아이디어는 차이의 절댓값을 a에 저장한 다음 그 중 가장 작은 값을 갖는 index를 array로 가져가서 찾는거였다.

만약 중복되는 것이 있다면 min을 통해 해결하려했는데 지피티가 깔끔하게 정리해줬다.

 

[다른 풀이]

 

sort함수에서 key값을 지정해주고 [0]으로 return하는 경우

 

solution=lambda array, n:sorted(array,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

 

작은 수를 sort함수를 통해 먼저 앞으로 빼주어서 .index(min(temp))로 불러오는 경우

def solution(array, n):
    array.sort()
    temp = []

    for i in array :
        temp.append( abs(n-i) )

    return array[temp.index(min(temp))]

 

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

암호 해독  (0) 2024.10.30
369게임  (0) 2024.10.29
삼각형의 완성조건(1)  (0) 2024.10.27
컨트롤 제트  (0) 2024.10.26
중복된 문자 제거  (0) 2024.10.25