[TIL][프로그래머스/Swift] 가까운 수 를 찾아서...

Eden·2024년 11월 18일
3

TIL

목록 보기
45/92
post-thumbnail

오늘은 배열에서 주어진 값 n에 가장 가까운 값을 찾는 문제를 해결했다. 이 과정에서 배열을 순회하면서 특정 값과의 차이를 비교하고, 그 중 가장 작은 차이를 가지는 값을 찾아내는 방법에 대해 배웠다. 아래 코드와 함께 상세하게 정리해본다.

문제 설명

정수 배열 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

최종 코드

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
}

풀이 과정

  1. 초기화:
  • var closest = array[0]: 배열의 첫 번째 값을 초기화하여 가장 가까운 값으로 설정한다. 이렇게 해야 비교 기준이 생기기 때문에 이후 다른 요소들과 비교할 수 있다.
  • var smallestDifference = abs(n - closest): nclosest의 차이를 smallestDifference로 초기화한다. 이를 통해 이후 배열의 다른 요소들과의 차이를 비교할 수 있다.
  1. 반복문으로 배열 순회:
  • for i in array: 배열의 모든 요소를 순회하며 각 요소와 n의 차이를 구하고, 현재 가장 가까운 값과 비교한다.
  • if difference < smallestDifference || (difference == smallestDifference && i < closest): 현재 차이가 smallestDifference보다 작거나, 차이가 같으면서 현재 값이 더 작은 경우 closestsmallestDifference를 업데이트한다.
  • 왜 difference == smallestDifference && i < closest 조건이 필요한가?: 테스트 케이스 5번에서 자꾸 삑사리가 나서 고민을 해봤는데, 문제에서 가장 가까운 수가 여러 개일 경우 더 작은 수를 반환하라고 했기 때문에 생각했어야하는 부분이었다.. 이 조건이 없으면, 차이가 같은 경우에도 배열에서 먼저 등장하는 값이 반환될 수 있어 잘못된 결과가 나올 수 있다. 따라서 차이가 같은 경우 작은 값을 선택하는 조건을 추가해야 했다.
  1. 결과 반환:
  • 배열을 모두 순회한 후 closest에 저장된 값이 n과 가장 가까운 값이므로 이를 반환한다.

배운점

이 문제는 초기화를 통해 비교의 기준을 설정하고 문제를 풀어나가는 것이 핵심이다. 첫 요소를 기준으로 초기화를 해야 이후의 요소들과 비교해 값을 찾아나갈 수 있기 때문이다. 이 초기화 과정을 놓쳤을 경우, 비교의 기준이 없어져 올바른 결과를 얻지 못하게 된다 like me~ 아무튼 실수를 통해 초기화의 중요성을 다시 한 번 깨닫게 되었다.

profile
Frontend🌐 and iOS

1개의 댓글

comment-user-thumbnail
2024년 11월 18일

헉 이거 아직 못 풀엇는데.. 스포 당하기전에 댓글 쓰기 힛

답글 달기