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; } |






댓글
댓글 쓰기