Can Place Flowers (leetcode 605)

문제

문제 링크

image


solution1

  • 속도: 56ms
var canPlaceFlowers = function (flowerbed, n) {
    let flowers = 0;
    for (let i = 0; i < flowerbed.length; i++) {
        if (flowerbed[i] === 1) {
            continue;
        }

        if (flowerbed[i - 1] !== 1 && flowerbed[i + 1] !== 1) {
            flowers++;
            i++;
        }
    }

    return flowers >= n;
};

canPlaceFlowers([1, 0, 0, 0, 1], 1); // true
canPlaceFlowers([1, 0, 0, 0, 1], 2); // false

현실 세계와 동일한 구조로 알고리즘을 짰다고 볼 수 있다.
화분 하나씩 확인해보는 것이다. (1. 비어 있는지 2. 양옆에 심어진 화분이 없는지)


solution2 (my answer)

  • 속도: 62ms (85.3%)
  • 메모리: 45.4mb (10.76%)
var canPlaceFlowers = function (flowerbed, n) {
    let str = "0" + flowerbed.join("") + "0";
    let a1 = str.split("1");
    let a2 = a1.filter((e) => e && e !== "00" && e !== "0");
    let a3 = a2.map((e) => e.replace("000", "A"));
    let a4 = a3.map((e) => e.replaceAll("00", "A"));
    let str2 = a4.join("");
    const count = (str2.match(/A/g) || []).length;
    return count >= n;
};

canPlaceFlowers([1, 0, 0, 0, 1], 1); // true
canPlaceFlowers([1, 0, 0, 0, 1], 2); // false

위에 답변과 달리 현실 세계와 생각 로직과 다른 방법을 찾다가 멀리 돌아온 것 같다.
속도가 느리지는 않지만 가독성이 좋지않고 노가다스러운 해결방법이다.

변수를 많이 써서 메모리도 많이 차지 한다.
변수가 쓸데없이 남발되는건 아닌지 의심해볼 필요가 있다!


댓글남기기