Coding Test/HackerRank

HackerRank 문제풀이 - 4 (Jumping on the Clouds)

범데이 2022. 12. 5. 16:22

1. 문제

  • 구름의 값(0, 1)이 들어있는 무작위 배열이 주어진다.
    • 0은 밟을수 있는 구름이고, 1은 밟을 수 없는 구름이다.
    • 첫번째 구름과 마지막 구름은 무조건 밟을수 있는 구름이다.
    • 점프를 한 칸이나 두 칸을 할 수있다.
    • 마지막 구름까지 최소 몇번의 점프를 해야 도달할 수 있는지 구하면 된다.

 


2. 풀이 

2.1 풀이 과정

function jumpingOnClouds(c) {
    // Write your code here
    // const tokens = c.split("\n");

    // const size = tokens[0];
    // const list = tokens[1].split(",");
    
    // const list = c.split(",");
    const list = c;

    let currentIndex = 0;
    let jumps = 0;
    do {
        if (currentIndex + 2 < list.length && list[currentIndex + 2] == "0") {
            currentIndex += 2;
            jumps++;
        } else if (currentIndex + 1 < list.length && list[currentIndex + 1] == "0") {
            currentIndex += 1;
            jumps++;
        } else {
            break;
        }

    } while (currentIndex < list.length);

    return jumps;
}

주어진 값이 무언가가 잘못된 듯 하다.

배열의 길이와 배열의 값이 띄어쓰기("\n")로 구분되어 입력으로 주어진다고 했는데,

배열의 값만 주어지는 듯 했다. 그래서 HackerRank에서 작성해준 코드는 주석처리 하였다.

 

 

풀이 과정은 다음과 같이 간단했는다.

  • 현재 밟고있는 인덱스를 변수(currentIndex)로 정의한다.
  • 몇번의 점프를 했는지를 변수(jumps)로 정의한다.
  • 주어진 list의 길이만큼 반복문을 돈다.
    • 만약 현재인덱스(currentIndex)보다 2가 큰 값만큼 list가 존재하고, 해당 값이 0이라면
      • 현재인덱스(currentIndex)를 2 증가시키고, 점프수(jumps)를 1 증가시킨다.
    • 아니라면, 만약 현재인덱스(currentIndex)보다 1가 큰 값만큼 list가 존재하고, 해당 값이 0이라면
      • 현재인덱스(currentIndex)를 1 증가시키고, 점프수(jumps)를 1 증가시킨다.

 

두칸 뒤의 구름이 밟을수 있는 구름이라면, 한 칸 뒤 구름이 밟을수 있는지 없는지 검사할 필요 없이 2칸 점프를 하면 되기 때문에 풀이가 심플했던 것 같다. 

 

 

2.2 풀이 결과

심플한 문제였기에 비교적 짧은 시간 안에 풀이를 통과하였다.

 

 

 

반응형