본문 바로가기

개발지/코테

[프로그래머스] 코테연습 - 점프와 순간 이동(lv.2)

- 내 방법 풀이

  • 간단한 문제일거라 생각했다. 처음 짝수와 홀수를 나누어 풀 생각을 했고, 현재 위치를 m으로 설정하여 m이 n과 같아질 때까지 계산하는 방법으로 접근했다.
  • 처음에 무조건 1을 점프하고, 그 뒤 m이 n과 같아질 때까지 while문을 돌려 같아지는 방법을 생각해봤지만 시도한 코드들이 맞지 않았고, 다시 수학적 접근을 해보려고 했다. 
  • n의 소수여부가 상관있는지 생각해봤지만 풀이에 큰 발전은 없었고, 계속 경우의 수인 코드를 생각해보았다.
  • 끝없이 늘어나 결국 다른 사람의 답을 참고하게 되었다.

- 다른 사람 방법 풀이

  • 찾아본 모든 풀이는 n에서 낮아지는 방법을 사용했다. 현재 위치를 설정하여 계산하는 방법은 없었다.
  • Top - down 방식의 풀이라고 하는데, 아직 접해본 적이 없었다. 내가 풀려고 한 방식은 Bottom - up의 방법이었다.
  • 풀이를 참고하여 n에서 0으로 내려가는 방식으로 풀었고, 이 방법이 효율적이고 직관적인 방법이었다.
  • 앞으로 풀이할 때 반대 방향도 생각해 볼 것.! 
import java.util.*;

class Solution { 
    public int solution(int n) {
        int ans = 0;
        
        while (n != 0) {
            if (n % 2 != 0) {
                n = n - 1;
                ans++;
            }
            n = n / 2;
        }
        
        return ans;
    }
}