두 아이, 릴리와 론은 초콜릿 바를 나누어 먹고 싶어합니다. 초콜릿의 각 조각에는 정수가 적혀 있습니다.
릴리는 다음 조건을 만족하는 연속된 초콜릿 조각을 골라 나누기로 결정합니다:
- 조각의 길이가 론의 생일 달과 같아야 하며,
- 조각에 적힌 정수들의 합이 론의 생일과 같아야 합니다.
초콜릿을 나눌 수 있는 방법이 몇 가지인지 결정하세요.
풀이 :
function birthday(s, d, m) {
const result = [];
for (let i = 0; i <= s.length - m; i++) {
let current = s[i];
for (let j = i + 1; j < i + m; j++) {
current += s[j];
}
if (current === d) {
result.push(s.slice(i, i + m));
}
}
return result.length;
}
조건에 충족하는 요소를 담을 배열을 선언하고 조건문을 통해 추출된 요소를 result 배열에 담습니다. 외부 for문에서 배열의 길이만큼 반복하되 남은 요소의 갯수가 m보다 작은 경우 더 이상 진행되지 않도록 s.length - m 으로 작성합니다.
다른 풀이 :
function birthday(s, d, m) {
let count = 0;
for (let i = 0; i <= s.length - m; i++) {
let sum = 0;
for (let j = i; j < i + m; j++) {
sum += s[j];
}
if (sum === d) {
count++;
}
}
return count;
}
문제에서 원하는 결과는 조합의 갯수, 굳이 배열을 생성해서 담을 필요없이 count변수로 횟수를 갱신하는 방식으로 처리합니다.
'Fundamentals > Algorithms' 카테고리의 다른 글
[해커랭크] Migratory Birds (0) | 2023.12.04 |
---|---|
[해커랭크] Divisible Sum Pairs (0) | 2023.12.04 |
[해커랭크] camelcase (0) | 2023.11.26 |
[해커랭크] Breaking the Records (0) | 2023.11.26 |
[해커랭크] Number Line Jumps (0) | 2023.11.16 |