가까운 수

2024. 9. 5. 18:00코딩테스트 입문

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


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


제한사항

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

입출력 예

array n result
[3, 10, 28] 20 28
[10, 11, 12] 13 12

입출력 예 설명
입출력 예 #1

  • 3, 10, 28 중 20과 가장 가까운 수는 28입니다.

입출력 예 #2

  • 10, 11, 12 중 13과 가장 가까운 수는 12입니다.

주어진 숫자 n에 가까운 순서대로 정렬하는 문제입니다.

 

파이썬의 정렬은 key 값을 설정하는 걸로 할 수 있는데요, 여기서는 람다 함수를 사용해서 문제를 풀 수 있습니다.
거리는 절댓값이기 때문에 절댓값을 1번 기준으로, 그다음은 작은 값 우선을 2번 기준으로 설정하면 됩니다.

파이썬으로 문제를 풀어보겠습니다.

def solution(array, n):
    # 리스트 array를 거리 기준 - 오름차순 기준으로 정렬합니다.
    answer = sorted(array, key=lambda x:(abs(n - x), x))
    # 첫 번째 값을 반환합니다.
    return answer[0]

 

key 값에 정렬 기준을 설정하는 것으로 원하는 대로 정렬을 할 수 있습니다.

람다 함수 말고도 cmp_to_key 함수도 있는데요, key = cmp_to_key(compare) 같은 형식으로 compare 식에 따라서 정렬하는 방법도 있습니다.

cmp_to_key는 기억해두시는 걸 추천합니다. 알고리즘 문제에서도 사용되는 함수거든요.

'코딩테스트 입문' 카테고리의 다른 글

암호 해독  (1) 2024.09.07
369게임  (2) 2024.09.06
삼각형의 완성조건 (1)  (0) 2024.09.04
중복된 문자 제거  (0) 2024.09.03
k의 개수  (0) 2024.09.02