728x90
반응형
605. Can Place Flowers
문제
긴 화단에 중간 중간 식물이 심어져 있다. 식물은 바로 붙어서 자랄 수 없어 적어도 한 칸씩 띄워서 자라야 한다.
flowerbed라는 integer array는 0과 1로 구성되어 있으며, 0은 비어있음을 의미하고 1은 식물이 심어져 있음을 의미한다. n 값은 새로 심고자 하는 식물의 수이고, n개를 심을 수 있을 경우 true이고 심을 수 없을 경우 false를 반환한다.
풀이
답안1의 경우는 discuss를 보지 않고 처음 풀었을 때 나온 답안이라 좀 코드 자체가 복잡해 보인다. 답안1은 flowerbed를 0번째 인덱스부터 반복문을 돌 때, i번째의 위치가 맨 처음인지, 맨 마지막인지, 중간인지 나누어 풀었다.
- 만약 i가 0이라면, (i+1)번째가 0이거나 flowerbed.size()가 1일 때 1개를 심을 수 있다.
- i가 flowerbed.size() - 1이라면, (i-1)번째가 0일 때 1개를 심을 수 있다.
- i가 맨 처음도, 맨 마지막도 아니라면 (i-1)번째와 (i+1)번째 모두가 0일 때 1개를 심을 수 있다.
답안2는 답안1이 마음에 들지 않아 discuss를 보면서 다른 사람의 코드를 이해해 본 답안이다. 답안2를 보면, i문을 각각 2가지 경우로 나눠서 한 것을 알 수 있다.
- i가 0이거나, flowerbed[i-1] == 0
- i가 flowerbed.size() - 1이거나, flowerbed[i+1] == 0
즉, 답안1에서 3가지로 나눈 것을 if문 속에 ||로 표현하여 한 번에 녹인 것이라고 할 수 있다.
신기한 것은, 답안1과 답안2의 runtime 시간은 동일하다는 것이고.. 메모리는 오히려 답안2가 더 쓴다는 것이다(코드가 더러운지, 깔끔한지의 차이..).
답안1
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
for(int i = 0; i < flowerbed.size(); i ++) {
if(n <= 0) break;
if(flowerbed[i] == 1) continue;
if(i == 0) {
if(i + 1 < flowerbed.size() && flowerbed[i+1] == 0) {
n--;
flowerbed[i] = 1;
}
else if(i == flowerbed.size() - 1) {
n--;
flowerbed[i] = 1;
}
}
else if(i == flowerbed.size() - 1) {
if(i - 1 >= 0 && flowerbed[i-1] == 0) {
n--;
flowerbed[i] = 1;
}
}
else {
if(i - 1 >= 0 && i + 1 < flowerbed.size() && flowerbed[i-1] == 0 && flowerbed[i+1] == 0) {
n--;
flowerbed[i] = 1;
}
}
}
if(n <= 0) return true;
else return false;
}
};
답안2
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
for(int i = 0; i < flowerbed.size(); i ++) {
if(n <= 0) break;
if(flowerbed[i] == 1) continue;
if((i == 0 || flowerbed[i-1] == 0) && (i == flowerbed.size() - 1 || flowerbed[i+1] == 0)) {
n--;
flowerbed[i] = 1;
}
}
if(n <= 0) return true;
else return false;
}
};
728x90
반응형
'ALGORITHM > Greedy' 카테고리의 다른 글
[leetcode] 1221. Split a String in Balanced Strings (0) | 2021.02.21 |
---|---|
[leetcode] 455. Assign Cookies (0) | 2020.12.05 |
[leetcode] 392. Is Subsequence (0) | 2020.12.04 |
[leetcode] 122. Best Time to Buy and Sell Stock II (0) | 2020.12.04 |