본문 바로가기

알고리즘/Hackerrank

Jumping on the Clouds

반응형




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Complete the jumpingOnClouds function below.
int jumpingOnClouds(vector<int> c) {
    int count = 0;
    int i = 0;
    while(1) {
        if(i + >= c.size()) break;
        if(c[i + 2!= 1) {
            count++;
            i += 2;
        }
        else if (c[i + 1== 0){
            count++;
            i++;
        }
    }
    return count;
}
cs


예시가 그림까지 너무 잘 나와있어서 모두 가져왔다.

문제는 구름을 뛰어넘는 것을 계산하는 문제이다. 하지만 구름의 종류가 두가지이다. 하나는 일반 구름, 다른 하나는 천둥을 포함하고 있는 구름이다. 
이때 천둥을 포함하는 구름을 피해서 마지막 구름까지 가는 가장 최소의 방법을 구하는 문제이다. 이때 움직이는 방법은 지금 구름으로부터 한번에 두칸 혹은 한칸만 움직일 수 있다.
여기서 천둥을 포함하고 있는 구름은 배열에 1로 저장이 되어있다.

해결법은 지금 서있는 구름에서 2칸 앞 구름을 봐서 그 구름이 천둥이 있는 구름이 아니면 인덱스를 2 더해주고 카운트 숫자를 하나 증가시킨다.
그 구름이 천둥이 있는 구름이라면 한칸 앞에 구름이 일반 구름인지를 확인해서 일반 구름이면 인덱스를 1 증가시키고 카운트도 하나 증가시킨다.

이렇게 인덱스를 증가하다가 만약 바로 다음 인덱스가 배열의 사이즈(여기서는 벡터를 인자로 받았다.)보다 크거나 같으면 while문을 끝내도록 break를 걸어준다. 


이렇게 반복문을 나가주는 이유는 지금 서있는 곳이 마지막 구름이기 때문에 더이상 비교를 하지 않아도 되기 때문이다.


그리고 함수의 반환값이 int형이기 때문에 지금까지 더해줬던 count값을 반환시키고 함수를 끝낸다.


'알고리즘 > Hackerrank' 카테고리의 다른 글

Hackerrank - Taum and B'day  (0) 2018.10.21
Equalize the Array  (0) 2018.10.10
ACM ICPC Team  (0) 2018.10.10
A very big sum  (0) 2018.10.09
Compare the Triplets  (0) 2018.10.09