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

이찬혁·2024년 5월 2일

알고리즘

목록 보기
55/72

프로그래머스 Lv2 - 점프와 순간이동 문제

프로그래머스 레벨 2 점프와 순간이동 문제를 풀이했다.

처음에 구현할 때 문제 설명에따라서 로직을 구현하려다보니 되게 복잡한 로직이 완성되었었고 몇 개의 테스트케이스에서 실패 판정을 받아서 통과하지 못했었다..
방법을 고민하다가 질문하기란에 들어가 한가지 힌트를 얻고 그대로 풀이했다.
풀이하고 보니 허탈할 정도로 너무 단순하게 풀이가 가능했다..

n을 줄여가며(점프는 1 이동 및 배터리소모 1, 순간이동은 2배 이동 및 배터리소모 0이므로)
단순하게 n을 2로 나눈 나머지가 0 이라면 순간이동을 할 수 있으니 순간이동, 0이 아니라면 점프를 해야하니 배터리를 1 소모하는 방식으로 풀이를 완성했다.

어려워보일수록 로직은 더 간단하고 쉬워보일수록 로직은 더 복잡한 코딩 테스트의 세계...ㅜ

JumpAndTeleport.java

package com.example.Programmers.Lv2;

/**
 * 프로그래머스 Lv2 - 점프와 순간이동
 */
public class JumpAndTeleport {
    public int solution(int n) {
        int ans = 0;

        while (n > 0) {
            // 2로 나눈 나머지가 0 -> 순간이동 했으니 배터리 소모가 없다
            if (n % 2 == 0) {
                n /= 2;
                // 2로 나눈 나머지가 0이 아님 -> 점프를 해야하니 배터리 1 소모
            } else {
                n--;
                ans++;
            }
        }

        return ans;
    }
}

JumpAndTeleportTest.java

package com.example.Programmers.Lv2;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class JumpAndTeleportTest {
    @Test
    public void testJumpAndTeleport() {
        JumpAndTeleport j = new JumpAndTeleport();

        int result1 = j.solution(5);
        int result2 = j.solution(6);
        int result3 = j.solution(5000);

        assertEquals(2, result1);
        assertEquals(2, result2);
        assertEquals(5, result3);
    }
}
profile
나의 개발로그

0개의 댓글