해결된 질문
작성
·
24
0
void flower(int cnt,int hap) {
if (cnt == 3) {
ret = min(ret, hap);
return;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (check(i, j)) {
flower(cnt+1,hap + setFlower(i, j));
eraseFlower(i, j);
}
}
}
}
이 부분에서 질문이 있습니다. 문제를 보면 화단 밖으로 꽃잎이 나가게 된다면 그 꽃은 죽어 버린다고 나와있는데 그러면
i와 j의 범위가 0부터 n-1까지가 아닌 1부터 n - 2까지여야되는 것이 아닌가요? 0과 n-1부분에 꽃이 있으면 그 꽃은 죽은거라 빼고 계산을 해야되는것이 맞지 않나 궁금합니다!
답변 2
0
안녕하세요 ㅎㅎ
그부분은 이 함수에서 다 걸러내지게 됩니다.
bool check(int y, int x) {
if (v[y][x]) return 0;
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (ny<0 || ny>=n || nx < 0 || nx >= n || v[ny][nx]) {
return 0;
}
}
return 1;
}
따라서 호출시 n - 1 등을 신경쓰지 않아도 됩니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다.
AA66님께서 질문하신 부분은 꽃길 문제에서 꽃을 심을 위치를 선정하는데 있어, 화단의 경계 부분을 제외해야 하는지에 대한 것으로 이해됩니다.
제공된 자료를 토대로 비슷한 문제 접근 방식에 대한 답변을 찾았습니다. 큰돌 선생님께서는 비슷한 질문에 대해 다음과 같이 답변하셨습니다:
3-P 꽃길 문제 풀이 질문드립니다.에서 수강생이 꽃길 문제에 대해 브루트포스 방식으로 접근하며, 시작점의 순회에 대한 범위 설정에 대해 질문하였습니다. 질문자는 조합을 사용해 꽃을 심을 수 있는 지점의 좌표를 구함에 있어서 상하좌우의 범위 체크 및 겹치는지 여부를 확인하는 로직을 사용하였고, 범위를 벗어났는지에 대한 검사가 중요한 부분을 차지합니다.
3-P 디버깅 질문입니다 라는 질문에서도 비슷한 문제로, 꽃을 심을 위치를 선택하는 로직의 디버깅에 관련된 상세 설명이 있었습니다. 이 답변에서 큰돌 선생님은 꽃을 심을 수 있는 올바른 영역을 선택하는 기준에 대해 설명해주셨습니다.
이러한 세부 정보를 바탕으로, AA66님께서 문제의 이해에 있어 중요한 부분을 접하신 것으로 보입니다. 화단 밖으로 꽃잎이 나가면 안 되므로, 실제로 i와 j의 범위를 1부터 n-2까지 설정하는 것이 맞습니다. 화단의 가장자리(0과 n-1)에서 꽃을 심게 되면, 그 꽃은 화단 밖으로 꽃잎이 나가게 되어 조건을 만족시키지 못합니다.
따라서, 범위 설정에 있어서 주의 깊게 접근해야 할 것입니다. 상하좌우를 고려할 때, 꽃을 심을 수 있는 안전한 위치는 화단의 가장자리를 제외한 내부 공간이어야 한다는 점을 기억하시면 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.