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를 리턴한다.
'HackerRank > Algorithms' 카테고리의 다른 글
[HackerRank C] Warmup : Plus Minus (0) | 2021.07.28 |
---|---|
[HackerRank C] Warmup : Birthday Cake Candles (0) | 2021.07.28 |
[HackerRank C] Warmup : Mini-Max Sum (0) | 2021.07.18 |
[HackerRank C] Strings : HackerRank in a String! (0) | 2021.07.11 |
[HackerRank C] Strings : CamelCase (0) | 2021.07.11 |