본문 바로가기

Fundamentals/Algorithms

[해커랭크] Subarray Division

문제링크

두 아이, 릴리와 론은 초콜릿 바를 나누어 먹고 싶어합니다. 초콜릿의 각 조각에는 정수가 적혀 있습니다.

릴리는 다음 조건을 만족하는 연속된 초콜릿 조각을 골라 나누기로 결정합니다:

- 조각의 길이가 론의 생일 달과 같아야 하며,

- 조각에 적힌 정수들의 합이 론의 생일과 같아야 합니다.

초콜릿을 나눌 수 있는 방법이 몇 가지인지 결정하세요.

 

풀이 :

 

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