HackerRank algorithm - Jumping on the Clouds (C)

HackerRank Algorithm 문제풀기

Issue : Jumping on the Clouds


문제 설명


문제를 간략히 설명하면 구름을 점프하며 뛰어넘는 게임입니다.
구름은 0,1 두가지 타입이 있습니다.
0의 구름은 점프가 가능하고 1은 불가능합니다.
각 구름간의 거리는 1이며 최대 최대 점프가 가능한 거리는 2입니다.





해결방법

최대 2칸을 갈 수 있는 경우의수를 집중해서 풀어봤습니다.


현재 위치가 0일때에 올 수 있는 경우의 수는 3가지 입니다.
1. 시작점
2. 1칸을 움직인 상태
3. 2칸을 움직인 상태 : 이 경우의 수는 최종 2칸 움직였으며 턴이 종료됩니다.


현재 위치가 1일때에 올 수 있는 경우의 수는 2가지 입니다.
1. 1칸 움직인 상태
2. 2칸 움직인 상태 : 이 경우의 수는 한걸음 뒤로 가서 최종 1칸 움직인 형태로 턴이 종료됩니다.


현재 위치가 0이며 한번도 움직인적이 없는 경우

한 칸 움직여야하며, 다음에 올 수 있는 경우의 수는 0또는 1입니다.


현재 위치가 0이며 직전 1칸 움직였던 경우

한 칸 움직여야하며, 다음에 올 수 있는 경우의 수는 0또는 1입니다.
다음 턴에 2칸 움직이며 0인경우 2칸을 움직인 상태로 최종 턴이 종료되며 1인 경우 2칸을 움직인 뒤 1칸을 돌아와 1칸을 움직인 상태로 최종 턴이 종료됩니다.

현재 위치가 1이며 직전 1칸 움직였던 경우

한 칸 움직여야하며, 다음에 올 수 있는 경우의 수는 0입니다.
다음 턴에 2칸 움직이며 최종 턴이 종료됩니다.


종합 : 

코드

 // Complete the jumpingOnClouds function below.

int jumpingOnClouds(int c_count, int* c) {
    int footcount=0;
    int foot=0;
    int cursor = 0;
    
    while(cursor != c_count) {
        if(*(c+cursor) == 0) {
            if(foot == 0) {
                foot++;
                cursor++;
            } else if(foot == 1) {
                foot++;
                cursor++;
                if(cursor == c_count) footcount++;
            } else if(foot == 2) {
                foot=0;
                footcount++;
            }
        } else {
            if(foot == 1) {
                foot++;
                cursor++;
            } else if(foot == 2) {
                foot=0;
                footcount++;
                cursor--;
            }
        }
        printf("cursor %d, foot %d\n",cursor, foot);
    }
    
    return footcount;
}



댓글