inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

4-H

4-H 코드 질문

해결된 질문

231

Raerae

작성한 질문수 5

0

안녕하세요 선생님! 강의 항상 잘 듣고 있습니다.

다름이 아니라 선생님 답안을 참고하여 코드를 작성하고 제출하였는데 4%에서 틀리게되어 고치고 다시 제출하였더니 맞았지만

어느부분이 왜 틀렸는지 잘 모르겠습니다...

제가 의심가는 부분은 최대 component 숫자를 업데이트하는 부분(ret2)인데 고치기 전 코드와 고치기 후 코드가 저에겐 같아보여서요.

참고로 틀린 코드 내에 ret1과 id의 역할은 거의 같습니다. (맞은 코드에서 하나로 고침)

한번 봐주시고 왜 틀렸는지 알려주시면 감사하겠습니다 (_ _)

틀린 코드 -
http://boj.kr/cb8d5a12b7d049788680dc1601edd57b

맞은 코드 -
http://boj.kr/d5a147432b404ec4b3a73ab3f2dbda25

c++ 코딩-테스트

답변 1

1

큰돌

안녕하세요 ㅎㅎ

일단은..

저 진짜 많이 시도했어요 ㅠㅠ

image

정답은 찾긴 했습니다 ㅎㅎ ..

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

int N, M, mp[51][51], ret1, ret2, ret3, tempRet, visited[51][51], cntSum[51];
pair<int,int> d[] = {{0,-1},{-1,0},{0,1},{1,0}}; 
int id; 

int dfs(int y, int x, int id) {
    if (visited[y][x]) return 0; 
    visited[y][x]=id;
    int cnt=1;
    for(int i=0; i<4; ++i) {
        if (!(mp[y][x] & (1<<i))) {
            int ny=y+d[i].first;
            int nx=x+d[i].second;
            cnt += dfs(ny,nx,id);
        }
    }
    return cnt;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> M >> N;
    for (int i=0; i<N; ++i) {
        for (int j=0; j<M; ++j) {
            cin >> mp[i][j];
        }
    }

    for (int i=0; i<N; ++i) {
        for (int j=0; j<M; ++j) {
            if (!visited[i][j]) {
                ++ret1; ++id;
                tempRet = dfs(i, j, id);
                cntSum[id]=tempRet;
            }
            ret2 = max(ret2, tempRet);
        }
    }

    for (int i=0; i<N; ++i) {
        for (int j=0; j<M; ++j) {
            if (i+1<N) {
                int id1=visited[i][j];
                int id2=visited[i+1][j];
                if (id1!=id2) ret3 = max(ret3, cntSum[id1]+cntSum[id2]);
            }
            if (j+1<M) {
                int id1=visited[i][j];
                int id2=visited[i][j+1];
                if (id1!=id2) ret3 = max(ret3, cntSum[id1]+cntSum[id2]);
            }
        }
    }

    cout << ret1 << '\n';
    cout << ret2 << '\n';
    cout << ret3 << '\n';
    

    return 0;
}

이렇게 하시면 틀리지 않고 맞게 나옵니다.

id라는 변수명을 써두요. ㅎㅎ

 

근데 왜 틀렸는지는... 모르겠습니다.

id라는 변수명이 잘못됬냐? -> 아닙니다.

++, ++; -> 이게 잘못됬냐.. 아닙니다. ㅠㅠㅠㅠ

 

백준 내부의 문제인것인지.. 모르겠습니다 ㅠㅠ

20% 부족한 답변 죄송합니다 ㅠ

 




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

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

감사합니다.

강사 큰돌 올림.

0

Raerae

설마했던 부분이었는데 그랬군요... 많은 시도해주셔서 감사합니다 선생님 ㅜㅜ 한번 백준에도 건의해볼게요~

1

큰돌

푸우.. 넵넵 ㅎㅎ 감사합니다.

코살구 1주차 1940번 문제 조건과 프라이빗 테스트 불일치 문의

0

15

2

문제를 고민하는 시간 관련

0

24

2

코딩살구클럽

0

33

2

코딩살구클럽 문의

0

32

2

코딩살구클럽 승인

0

34

2

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

0

33

2

3-F 채점 관련 질문

0

30

1

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

0

33

2

코딩살구클럽 승인

0

44

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

67

2

코딩살구클럽 로그인문제

0

85

3

코딩 살구 클럽 로그인 문제

0

85

2

2-J 채점관련 질문

0

67

3

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

0

77

1

살구클럽 아이디 없음 문제

0

76

1