문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
릴리와 론은 초코바를 나누길 원한다. 초코바에 각 정수를 가지고 있다.
릴리는 다음과 같이 선택된 방법으로 나누는 것을 결심했다.
s = [2, 2, 1, 3, 2]
d = 4
m = 2
릴리는 론의 태어난 일인 d = 4와 태어난 월인 m = 2의 합을 구하길 원한다.
이 경우, 그녀의 규칙에 따라 [2, 2]와 [1, 3]이 있다.
the birthday 함수를 완성해라.
birthday는 다음과 같은 매개변수를 가지고 있다.
간단하게 반복문을 사용해서 풀었다.
먼저 경우의 수를 셀 변수를 선언한다.
int result = 0;
반복문을 통해 리스트의 요소를 순회한다. 이때 i = m - 1로 했는데, 그 이유는 리스트의 index와 맞추기 위함이다.
for(int i = m - 1; i < s.size(); i++){
}
그리고 지역변수 sum을 선언을 하고 0을 할당한다.
반복문을 하나 더 구현한다. 해당 index에서 m개의 요소의 합을 구함이다.
지역변수 sum과 d를 비교하여 같으면 result를 증가시킨다.
for(int i = m - 1; i < s.size(); i++){
int sum = 0;
// s[i]는 최대 값이 5라서 100개를 더해도
// 충분히 int형으로 계산할 수 있음
for(int j = i - m + 1; j <= i; j++){
sum += s.get(j);
}
if(sum == d){
result++;
}
}
마지막으로 result를 반환하면 끝이다.
return result;
경우가 많지 않아 시간복잡도와 공간복잡도는 신경쓰지 않았다.
public static int birthday(List<Integer> s, int d, int m) {
int result = 0;
for(int i = m - 1; i < s.size(); i++){
int sum = 0;
for(int j = i - m + 1; j <= i; j++){
sum += s.get(j);
}
if(sum == d){
result++;
}
}
return result;
}