inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2-P

2 - P 질문

173

재석 강

작성한 질문수 4

0

http://boj.kr/ce16c6cbdf114d2dab3f3a8f44c9c285
안녕하세요 강사님

2-P 문제를 강사님의 풀이와는 달리 for 중첩문이랑 처음 입력한 mp배열을 복사해서 풀이할 temp배열을 만들어서 풀어봤는데 몇몇 예제에서 오답이 나와서 질문 드려요ㅠㅡ

c++ 코딩-테스트

답변 2

0

큰돌

안녕하세요 ㅎㅎ

    for(int i = 0; i < n * m; i++){
        if(mp[i / n][i % n] == 0) mp[i / n][i % n] = 1;

이거 두번째 차원의 i % n -> i % m 이 되어야 하지 않을까요?

 

제가 좀 다듬어봤습니다. ㅎㅎ 참고해주세요~

#include<bits/stdc++.h>
using namespace std;

int n, m, ret = 0;
int dy[] = {-1, 0, 1, 0};
int dx[] = {0, 1, 0, -1};
int mp[8][8];
int temp[8][8];
bool visited[8][8];

void dfs_v(int y, int x) {
    visited[y][x] = true;
    temp[y][x] = 2;  
    for (int i = 0; i < 4; i++) {
        int ny = y + dy[i];
        int nx = x + dx[i];
        if (ny < 0 || nx < 0 || ny >= n || nx >= m) continue;
        if (!visited[ny][nx] && temp[ny][nx] == 0) {
            dfs_v(ny, nx);
        }
    }
}

void fillVirus() {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (temp[i][j] == 2 && !visited[i][j]) {
                dfs_v(i, j);
            }
        }
    }
}

void check() {
    int safeArea = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (temp[i][j] == 0) safeArea++;
        }
    }
    ret = max(ret, safeArea);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) cin >> mp[i][j];
    }

    for (int i = 0; i < n * m; i++) {
        int x1 = i / m, y1 = i % m;
        if (mp[x1][y1] != 0) continue;
        for (int j = i + 1; j < n * m; j++) {
            int x2 = j / m, y2 = j % m;
            if (mp[x2][y2] != 0) continue;
            for (int k = j + 1; k < n * m; k++) {
                int x3 = k / m, y3 = k % m;
                if (mp[x3][y3] != 0) continue;
                 
                mp[x1][y1] = mp[x2][y2] = mp[x3][y3] = 1;
                 
                memcpy(temp, mp, sizeof(mp));
                memset(visited, false, sizeof(visited));
                fillVirus();
                check();
                 
                mp[x1][y1] = mp[x2][y2] = mp[x3][y3] = 0;
            }
        }
    }
    cout << ret << '\n';
    return 0;
}


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

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

감사합니다.

강사 큰돌 올림.

0

인프런 AI 인턴

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

강의 관련 질문은 강의를 결제하신 후, 해당 강의의 ‘수강 후 문의 게시판’을 이용해 주시는 것이 가장 빠른 피드백을 받을 수 있는 방법입니다. 제공된 정보에 따르면, 수강 전인 경우에는 [수강 전 문의 게시판]을 통해 질문하는 방법이 있지만, 이미 수강 중이시라면 강의 페이지 내에서 직접 강사님께 질문을 남기시는 것이 좋습니다.

문제의 특정 예제에서 오답이 나오는 경우, 보통 반례를 찾거나 알고리즘의 로직을 다시 한 번 검토해보아야 합니다. 중첩된 for문이나 배열을 복사하는 로직에서 놓친 부분이 없는지, 예외 사항을 처리하지 않았는지 확인해 보세요.

직접적인 코드 리뷰가 필요하신 경우라면 해당 강의의 문의하기 섹션 또는 개발자 커뮤니티, 스택 오버플로우와 같은 외부 플랫폼을 이용해 좀 더 구체적인 피드백을 얻는 것도 방법입니다.

다만, 구체적인 코드 없이는 정확한 오류 원인 파악이 어려울 수 있으니, 가능하다면 코드 일부나 오류가 발생하는 특정 부분을 함께 질문하시면 좋습니다.

도움이 필요하시다면 언제든지 문의해 주세요. 감사합니다!

문제를 고민하는 시간 관련

0

15

2

코딩살구클럽

0

28

2

코딩살구클럽 문의

0

30

2

코딩살구클럽 승인

0

33

2

DP 경우의 수 설명이 이해가 되지 않습니다.

0

32

2

3-F 채점 관련 질문

0

29

1

BFS, DFS 활용이 되는 상황에서의 방향성

0

32

2

코딩살구클럽 승인

0

43

2

코딩살구클럽승인

0

39

3

코딩살구클럽 승인

0

51

2

3-D 관련 질문

0

35

2

코살구 회원가입 문의

0

45

2

코살구 로그인 문제

0

65

2

3-A 문제 풀이 관련 질문

0

56

3

2-O 질문 있습니다

0

38

2

2-T 문제에 관한 질문

0

40

2

코딩 살구 클럽 접속 및 사용방법 문의

0

63

2

안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~

0

64

2

코딩살구클럽 로그인문제

0

78

3

코딩 살구 클럽 로그인 문제

0

85

2

2-J 채점관련 질문

0

67

3

코딩 살구 클럽 Python 지원 가능 여부

0

77

1

살구클럽 아이디 없음 문제

0

76

1

1-O 코딩살구클럽 채점관련 질문

0

61

2