인프런 커뮤니티 질문&답변

최문규님의 프로필 이미지
최문규

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-P

2-P 질문입니다!

해결된 질문

작성

·

78

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

http://boj.kr/2dc048384b444c409a1766d05a3eb71c

안녕하세요!

0의 갯수에서 3개를 골라 a배열에 1을 대입하고 값이 2인 경우 dfs 돌면서 0인 경우 카운트를 해 2 영역의 최솟값을 구했습니다. 출력은 처음 0의 갯수에서 0->1로 바뀐 3과 2영역의 최솟값인 mi를 빼서

zero.size() - 3 - mi 로 구했는데 예제입력 2번에서 mi값이 0이 나오는데 어떤 오류인지 모르겠어 질문남깁니다.

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 문규님 ㅎㅎ

    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            cin >> a[i][j];
            if(a[i][j]==0) {
                zero.push_back({i,j});

지금 보시면 zero를 기반으로 -> c를 만듬.

이 c에는 {1, 2}, 등.. 벽이 될 수 있는 좌표가 들어가 있겠죠?

 

그러면.

이 좌표를 기반으로.


    a[zero[c[k][0]].first][zero[c[k][0]].second] = 1;

앞의 코드가 아니라.

이렇게 직접적으로 해당 좌표에 벽을 세우는 꼴이 되어야 하지 않을까요?


    a[c[k][0].first][c[k][0].second] = 1;

 

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용은 프로그래밍 문제 해결 과정에서 발생한 구체적인 로직 오류와 관련된 것으로 보입니다. 질문하신 내용을 바탕으로 단편적인 조언을 드릴 수 있으며, 제공된 정보만으로는 정확한 문제의 원인을 파악하는 것에 한계가 있습니다.

우선, 출력하신 mi값이 0이 나오는 오류는 dfs 함수를 통해 2 영역을 탐색하고 카운트하는 과정에서 발생할 수 있습니다. 이러한 경우, 다음과 같은 접근 방법을 고려해볼 수 있습니다:

  1. dfs 함수가 올바르게 0인 경우만 카운트하고 있는지 확인해보세요. 이 과정에서 모든 인접한 2 영역이 올바르게 탐색되고 있는지 검토가 필요합니다.
  2. 배열의 경계 조건을 올바르게 처리하고 있는지 검토해보세요. 잘못된 인덱스 접근으로 인해 2 영역의 탐색이 누락되는 경우가 없도록 해야 합니다.
  3. mi 값이 0이 나온다면, 탐색 과정에서 2 영역이 전혀 발견되지 않았거나 탐색 로직에 문제가 있을 수 있습니다. 해당 영역을 정확히 탐색하기 위한 조건과 로직을 재검토해보세요.

또한, 코드의 전체적인 구조와 특정 부분에서의 로직을 다시 한번 신중하게 확인하여 문제의 원인을 좁혀나가는 것이 중요합니다. 특히, 재귀적인 함수 호출과 관련된 오류, 경계 값 처리, 조건문의 정확성을 확인하는 것이 도움이 됩니다.

이 내용으로 문제를 해결하는 데 충분하지 않다면, 관련 코드를 좀 더 상세히 제공해주시거나, 구체적인 함수의 구현 방식과 조건을 공유해주시면 더 정확한 조언을 드릴 수 있을 것입니다.

프로그래밍 문제 해결 과정은 때로 복잡할 수 있으며, 디버깅 과정에서 다양한 시도와 접근이 필요합니다. 문제 해결을 위해 차근차근 접근해보시기 바랍니다.

최문규님의 프로필 이미지
최문규

작성한 질문수

질문하기