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

김동훈님의 프로필 이미지
김동훈

작성한 질문수

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

7-O

7-O 질문입니다!

작성

·

335

0

안녕하세요, 큰돌님

17837을 풀던중 문제 예제 입력 5에서 답이 나오지 않습니다.

반례를 다 찾았다고 생각했는데, 대체 왜 안되는지 궁금합니다...

 

https://www.acmicpc.net/source/72120636

답변 4

0

김동훈님의 프로필 이미지
김동훈
질문자

죄송합니다..
저렇게 디버깅 할 생각을 못 했네요

로직 고치고 맞췄습니다!
항상 답글 달아 주시는 것 감사합니다!

 

https://www.acmicpc.net/source/72431720

 

0

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

혹시 디버깅코드 넣어서 벡터내의 있는 말들이 잘 움직이나 테스팅해보셨나요?

ex5의 경우.

이거 정상적인 코드는

START
0 1 0 1 0 0 
1 0 0 0 0 1 
0 0 0 0 0 0 
0 0 2 0 2 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 0 
1 0 0 1 0 0 
0 0 0 2 0 1 
0 0 0 0 0 0 
0 2 0 0 0 0 
1 0 0 0 0 1 
START
0 1 0 0 0 0 
1 0 1 0 0 1 
0 0 1 1 0 0 
0 1 0 0 0 0 
0 0 1 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 1 
1 0 0 0 0 0 
0 2 1 0 0 0 
0 0 0 1 0 0 
0 1 0 0 0 0 
1 0 0 0 0 1 
START
0 1 0 0 0 0 
1 0 0 0 0 1 
0 0 0 1 0 0 
1 1 1 0 0 0 
0 0 1 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 0 
1 0 0 1 0 0 
0 0 0 0 0 1 
0 1 0 0 0 0 
0 3 0 0 0 0 
1 0 0 0 0 1 
7

다음과 같이 움직입니다.

 

근데 동훈님 코드는 다음과 같이 움직입니다.

START
0 1 0 1 0 0 
1 0 0 0 0 1 
0 0 0 0 0 0 
0 0 2 0 2 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 0 
1 0 0 1 0 0 
0 0 0 0 0 1 
0 0 2 0 0 0 
0 0 0 0 0 0 
1 0 2 0 0 1 
START
0 1 0 0 0 0 
1 0 0 0 0 1 
0 0 0 1 0 0 
1 1 2 0 0 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 1 
1 0 1 0 0 0 
0 0 1 0 0 0 
0 2 0 1 0 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
START
0 1 0 0 0 0 
1 0 0 0 0 1 
0 0 2 1 0 0 
0 0 2 0 0 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 0 
1 0 0 1 0 0 
0 0 0 0 0 1 
0 0 1 1 2 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
START
0 1 0 1 0 0 
1 0 0 0 0 1 
0 0 0 0 0 0 
0 0 0 3 0 0 
0 0 1 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 1 
1 0 0 1 0 0 
0 0 0 0 0 0 
0 3 0 0 0 0 
0 0 0 0 0 0 
1 0 1 0 0 1 
START
0 1 0 0 0 0 
1 0 0 0 0 1 
0 0 0 1 0 0 
0 3 0 0 0 0 
0 0 1 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 0 
1 0 0 0 0 0 
0 0 0 0 0 1 
0 0 2 3 0 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
11

여기서 하나만 뽑으면.

그냥 첫번째부터 잘못되었는데요.

 

이부분 다음과 같이 진행되어야 하는데요.

START
0 1 0 1 0 0 
1 0 0 0 0 1 
0 0 0 0 0 0 
0 0 2 0 2 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 0 
1 0 0 1 0 0 
0 0 0 2 0 1 
0 0 0 0 0 0 
0 2 0 0 0 0 
1 0 0 0 0 1 

 

이렇게 진행되고 있습니다.

START
0 1 0 1 0 0 
1 0 0 0 0 1 
0 0 0 0 0 0 
0 0 2 0 2 0 
0 0 0 0 0 0 
1 0 0 0 0 1 
START
1 0 0 0 0 0 
1 0 0 1 0 0 
0 0 0 0 0 1 
0 0 2 0 0 0 
0 0 0 0 0 0 
1 0 2 0 0 1 

확인부탁드립니다.

 

디버깅코드

        if (move()){
            cout << cnt;
            break;
        } 
        cout << "START\n";
        for (int i = 1; i <= N; i++){
            for (int j = 1; j <= N; j++){
                cout << M[i][j].size() << " ";
            }
            cout << "\n";
        }

 

 

감사합니다.

0

김동훈님의 프로필 이미지
김동훈
질문자

바깥으로 나갈때, 파란색으로 경우 처리를 하라고 했으니, 조건문을 바깥으로 나간다면 이라고 처리 해주었습니다. 뒤는 else if 문을 사용해 밖으로 벗어나는 경우를 없앴습니다.

 

image

image

https://www.acmicpc.net/source/72245823

0

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

안녕하세요 동훈님 ㅎㅎ

코드 좀 봤는데요.

 

    for (int i = 1; i <= N; i++){
        for (int j = 1; j <= N; j++){
            cin >> A[i][j];
        }
    }

입력을 1 부터 받아놨고 그걸기반으로 했다면...

        if (my > N || my <= 0 || mx > N || mx <= 0){

이거 1 ~ N 이렇게 되어야 하는게 아닐까요?

 

감사합니다.

김동훈님의 프로필 이미지
김동훈
질문자

바깥으로 나갈때, 파란색으로 경우 처리를 하라고 했으니, 조건문을 바깥으로 나간다면 이라고 처리 해주었습니다. 뒤는 else if 문을 사용해 밖으로 벗어나는 경우를 없앴습니다.

 

image

image

https://www.acmicpc.net/source/72245823

김동훈님의 프로필 이미지
김동훈

작성한 질문수

질문하기