[프로그래머스] Lv.0 가까운 수

Jiumn·2023년 2월 14일
0

[프로그래머스] Lv.0 가까운 수

문제 설명

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

제한사항

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

입출력 예

arraynresult
[3, 10, 28]2028
[10, 11, 12]1312

입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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


풀이

문제를 풀다가 놓쳤던 부분이 있다.

'가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.'이라는 제한사항 때문에 여러 조건을 만들다가 예외 케이스를 포함하지 못한 것.

하지만 답은 늘 그렇듯 더 간단한 곳에 있었다.

  1. 주어진 정수 배열 array를 .sort() 함수로 오름차순 정렬하고 시작하기

  2. .index() 함수를 이용하면 중복되는 원소 중 가장 첫 번째를 반환한다.

그러니까 배열을 오름차순으로 정렬하고 인덱스를 구하면 가장 가까운 수가 여러 개일 경우에도 첫 번째 원소만 반환해준다. if 조건문으로 복잡하게 분기해줄 필요가 없는 것이다.

다른 사람의 풀이

풀이 1

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

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

    return array[temp.index(min(temp))] # 4
  1. 주어진 정수 배열을 오름차순으로 정렬한다.
  2. 절대값을 담을 빈 배열을 선언한다.
  3. 반복문으로 정수 배열에서 원소를 하나씩 꺼내 정수 배열과 n의 차를 절대값으로 변환한 값을 빈 배열에 넣어준다. (n과 가장 가까운 원소를 찾는 것이므로 절대값이 작은 값일수록 가까운 수다.)
  4. 절대값 배열 중 가장 작은 원소를 찾고, 그 수가 절대값 배열에서 몇 번째 인덱스 값을 갖는지 찾고, 정수 배열에서 그 인덱스 값에 해당하는 원소를 리턴한다.

풀이 2

def solution(array, n):
    array.sort(key = lambda x : (abs(x-n), x-n))
    answer = array[0]
    return answer

lambda 함수로 푼 풀이도 확인해보자.

.sort() 함수에서 key는 정렬의 기준을 정해주는 값이다.
위 경우처럼 key 값이 여러 개가 들어갈 경우(lambda x : (abs(x-n), x-n)) 첫 번째 인자가 우선, 두 번째 인자가 차선으로 정해진다.

(음수일 때의 값도 같이 고려해준 건가...? 왜 두 번째 인자도 들어가는지는 정확히 모르겠다.)

profile
Back-End Wep Developer. 꾸준함이 능력이다.

0개의 댓글