본문 바로가기
Beakjoon&프로그래머스/Java

[LeetCode/Java] Can Place Flowers

by 현장 2025. 12. 19.

-Code

class Solution {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        if (flowerbed.length == 1) {
            n -= flowerbed[0] == 0 ? 1 : 0;
        } else {
            for (int i = 0; i < flowerbed.length; i++) {
                System.out.println(valid(flowerbed, i));
                if (valid(flowerbed, i) && flowerbed[i] == 0) {
                    flowerbed[i] = 1;
                    n--;
                }
            }    
        }

        return n <= 0;
    }

    private static boolean valid(int[] arr, int idx) {
        if (idx == 0)
            return arr[idx + 1] == 0;
        if (idx == arr.length - 1)
            return arr[idx - 1] == 0;
        return arr[idx - 1] == 0 && arr[idx + 1] == 0;
    }
}

처음에 위와 같이 해서 맞긴 했으나 복잡해서 다른 풀이를 바탕으로 아래와 같이 다시 풀었습니다.

class Solution {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        for (int i = 0; i < flowerbed.length; i++) {
            if (flowerbed[i] == 0) {
                int left = i == 0 ? 0 : flowerbed[i - 1];
                int right = i == flowerbed.length - 1 ?
                        0 : flowerbed[i + 1];
                if (left == 0 && right == 0) {
                    flowerbed[i] = 1;
                    n--;
                    if (n <= 0)
                        return true;
                }
            }
        }

        return n <= 0;
    }
}