HackerRank/Algorithms

[HackerRank C] Implementation : Subarray Division

ruming 2021. 7. 18. 20:42

s 배열에서 연속으로 m개만큼 더해 그 합이 d가 되는 개수를 찾으면 된다.

 

<범위>

 

<입력>

n

s[i]

d m

 

처음엔 상당히 복잡하게 생각했는데 생각보다 쉬운 문제였다. 고민한 것이 무색하게도...

d=1이나 m=1같은 케이스를 따로 만들어줬었는데 오히려 더 복잡해져서 빼버렸다. 

그리고 합을 저장할 배열을 따로 선언할 필요 없이 바로 answer을 flag처럼 이용해 개수를 구했다.

int birthday(int s_count, int* s, int d, int m) {
    int i, j, answer = 0, temp;
    for(i=0; i<s_count-m+1; i++){
        temp = 0;
        for(j=0; j<m; j++){
            temp += s[i+j];
        }
        if(temp == d)   answer++;
    }
    return answer;
}

반복문을 어디까지 사용해야 하는지 약간 주의가 필요하다. m개만큼 연속으로 계속 더한다고 하면, 총 개수에서 m만큼 뺀 거에 1을 더한 수만큼 계산한다. 그리고 temp변수를 이용해 m개만큼 더한 수를 저장하고, temp가 d와 같으면 answer를 1씩 증가했다. 마지막에 answer를 리턴한다.