📌 문제 링크 :
https://leetcode.com/problems/can-place-flowers
✅ 내 풀이(Success) :
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
int L = flowerbed.length;
for (int i = 0; i < L; i++) {
if (flowerbed[i] == 0) {
if (i == 0) {
if (L == 1) {
flowerbed[i] = 1;
n--;
} else if (flowerbed[i+1] == 0) {
flowerbed[i] = 1;
n--;
}
}
if (i > 0 && i < L-1) {
if (flowerbed[i-1] == 0 && flowerbed[i+1] == 0) {
flowerbed[i] = 1;
n--;
}
}
if (i == L-1) {
if (L > 1 && flowerbed[i-1] == 0) {
flowerbed[i] = 1;
n--;
}
}
}
if (n <= 0) {
return true;
}
}
return false;
}
}
🔨 리팩토링 :
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
int L = flowerbed.length;
for (int i = 0; i < L && n > 0; i++) {
if (flowerbed[i] == 0) {
boolean leftEmpty = (i == 0) || flowerbed[i - 1] == 0;
boolean rightEmpty = (i == L - 1) || flowerbed[i + 1] == 0;
if (leftEmpty && rightEmpty) {
flowerbed[i] = 1;
n--;
}
}
}
return n <= 0;
}
}
🧐 리뷰 :
이번 문제를 풀면서 느낀 점은, if문과 꽃을 심는 로직, 그리고 꽃의 개수를 감소시키는 코드가 여러 곳에서 반복된다는 것이었다.
처음엔 조건마다 세분화해서 처리했지만, 그 결과 코드가 불필요하게 복잡해지고 가독성도 떨어졌다.
문제를 푼 뒤, 내가 작성한 코드를 GPT에게 중첩된 if문을 제거하는 방향으로 리팩토링해달라고 요청했다.
리팩토링된 코드는 for 반복문에 (n > 0) 조건을 추가하여, 더 이상 꽃을 심을 필요가 없을 때는 반복을 중단하고 바로 결과를 반환하도록 개선되어 있었다.
또한 두 개의 boolean 변수를 사용해, 현재 위치의 양쪽이 비어 있는지를 단순하고 명확하게 비교하도록 변경된 점이 특히 인상적이었다.
이번 리팩토링을 통해 “조건 분기를 줄이면서도 로직의 의도를 명확히 드러내는 코드 구조”의 중요성을 다시 한 번 느꼈다.
앞으로는 일단 빠르게 문제를 해결하는 것을 목표로 하고, 이후에 중복된 조건이나 로직을 합칠 수 있는지, 그리고 가독성을 유지하면서 코드를 단순화할 수 있는지를 의식적으로 점검해봐야겠다.
'알고리즘 문제 풀이: 자바 > LeetCode' 카테고리의 다른 글
| 735. Asteroid Collision (0) | 2025.11.08 |
|---|---|
| 238. Product of Array Except Self (0) | 2025.11.06 |
| 345. Reverse Vowels of a String (0) | 2025.11.04 |
| 151. Reverse Words in a String (0) | 2025.11.03 |
| 1207. Unique Number of Occurrences (0) | 2025.11.02 |
댓글