Swift랑 친해지기/programmers 풀기

[프로그래머스] 점프와 순간 이동 (Swift)

데브킹덕 2022. 10. 30. 16:46

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

 

프로그래머스

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

programmers.co.kr

 

 

  • 초기값이 n인 divideN을 생성
  • 배터리 사용량 useBattery 변수 생성

나만의 풀이 방법)

순간이동을 하면 배터리를 사용하지 않고 이동한 현재 자리 x 2인 곳에 순간이동할 수 있음

이 말은 divideN을 2로 나누어 나머지가 없는 짝수일 경우는 텔레포트를 타고

홀수면? 점프해서 배터리를 사용하라는 소리임

 

최종 도착지에 도달할 때까지 반복해야하므로 divideN이 0이 아닐동안 while문을 이용해 반복함

 

 

 

 

 

처음에 푼 코드

효율성 테스트 4번 실행초과가 뜸

바꾼점- divideN이 짝수든 홀수든 어쨋든 2로 나눈 몫은 -1을 하기 전과 같음

때문에 if else 문으로 조건을 구분하지 않고 홀수 일경우 배터리를 +1을 해주고 2로 나눠주면 됨

import Foundation

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

 

 

 

개선한 코드

import Foundation

func solution(_ n:Int) -> Int 
{
    var divideN = n
    var useBattery = 0
    
    while divideN != 0{
        if divideN % 2 != 0{
            useBattery += 1
        }
          divideN /= 2
    }
    return useBattery
}