[Swift] [9일차] 점프와순간이동

·2024년 12월 15일
0

SwiftAlgorithm

목록 보기
11/105
post-thumbnail

programmers-점프와순간이동

문제 간단 설명

  1. n까지 도착해야하는 전량 구하기
  2. 1움직이면 전량 1들고
  3. 지금까지 움직인 거리 * 2배로 순간이동하는건 전력 소모 X
  4. 전력 제일 조금쓰고 도착해라, 몇드는지 출력

이런 문제였고, 핵심은 순간이동을 얼마나 많이하냐! 였던 것 같다.
그래서 2배뛰기 해도 괜찮은지를 판단해주려면 이제 이걸 뒤에서부터 출발하면서 , n%2 == 0 이 되는지 판단해주고 움직인 거리를 반으로 줄여주면 될 것이다.
그리고 안나눠질때는 n-1 해주면서 ans+1 해주면 해결!

완성 코드

import Foundation
func solution(_ n: Int) -> Int {
    var ans = 0
    var n = n
    while n > 0 {
        if n % 2 == 0 {
            n = n / 2
        }
        else {
            n -= 1
            ans += 1
        }
    }
    return ans
}

이렇게 일단 풀이는 성공했는데, 다른 분들 코드를 보니 이걸 재귀로 풀 수 있겠구나싶었다.

개선 코드

import Foundation
func solution(_ n: Int) -> Int {
    if n == 1 { return 1 }
    if n % 2 == 0 { return solution(n / 2) }
    return solution(n / 2) + 1
}

느낀점

앞에서부터 계산하려니까 너무 어려웠는데, 뒤에서부터 순간이동만 찝고 들어가니까 금방 풀렸던 것 같다.
나였으면 함수를 또 만들어서 카운팅도 같이 인자로 넣어줬을 것 같은데
return solution(n / 2) + 1로 풀어준 게 좋게 느껴졌다.

profile
기억보단 기록을

0개의 댓글