오늘은 배열에서 주어진 값 n
에 가장 가까운 값을 찾는 문제를 해결했다. 이 과정에서 배열을 순회하면서 특정 값과의 차이를 비교하고, 그 중 가장 작은 차이를 가지는 값을 찾아내는 방법에 대해 배웠다. 아래 코드와 함께 상세하게 정리해본다.
정수 배열
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
import Foundation
func solution(_ array: [Int], _ n: Int) -> Int {
var closest = array[0] // 초기화: 가장 가까운 값을 배열의 첫 번째 값으로 초기화
var smallestDifference = abs(n - closest) // 초기화: n과의 차이를 구해 가장 작은 차이를 저장
for i in array {
let difference = abs(n - i) // 현재 요소와 n의 절댓값 차이를 구함
if difference < smallestDifference || (difference == smallestDifference && i < closest) { // 차이가 같다면 더 작은 값을 선택
closest = i // 가장 가까운 값을 현재 값으로 업데이트
smallestDifference = difference // 가장 작은 차이도 현재 차이로 업데이트
}
}
return closest
}
var closest = array[0]
: 배열의 첫 번째 값을 초기화하여 가장 가까운 값으로 설정한다. 이렇게 해야 비교 기준이 생기기 때문에 이후 다른 요소들과 비교할 수 있다.var smallestDifference = abs(n - closest)
: n
과 closest
의 차이를 smallestDifference
로 초기화한다. 이를 통해 이후 배열의 다른 요소들과의 차이를 비교할 수 있다.for i in array
: 배열의 모든 요소를 순회하며 각 요소와 n
의 차이를 구하고, 현재 가장 가까운 값과 비교한다.if difference < smallestDifference || (difference == smallestDifference && i < closest)
: 현재 차이가 smallestDifference
보다 작거나, 차이가 같으면서 현재 값이 더 작은 경우 closest
와 smallestDifference
를 업데이트한다.closest
에 저장된 값이 n
과 가장 가까운 값이므로 이를 반환한다.이 문제는 초기화를 통해 비교의 기준을 설정하고 문제를 풀어나가는 것이 핵심이다. 첫 요소를 기준으로 초기화를 해야 이후의 요소들과 비교해 값을 찾아나갈 수 있기 때문이다. 이 초기화 과정을 놓쳤을 경우, 비교의 기준이 없어져 올바른 결과를 얻지 못하게 된다 like me~ 아무튼 실수를 통해 초기화의 중요성을 다시 한 번 깨닫게 되었다.
헉 이거 아직 못 풀엇는데.. 스포 당하기전에 댓글 쓰기 힛