본문 바로가기
Computer Science/Algorithm

코드업 1099번문제 - 개미 경로 찾기

by 9루트 2022. 6. 22.

 

https://codeup.kr/problem.php?id=1099&rid=0 

 

[기초-2차원배열] 성실한 개미

C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요.  - 모든 내용

codeup.kr

 

 

계속 표현 에러가 뜬다;;

 

 

#include <iostream>
using namespace std;

int main()
{
    // 2차원 배열 a 선언
    int a[10][10] = {0, };

    // 상자의 구조를 입력 받는다.
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            int t = 0;
            cin >> t;
            a[i][j] = t;
        }
        cout << endl;
    }

    // 개미를 이동 시킨다.
    int x = 1;
    int y = 1;
    a[x][y] = 9;
    while (1) {
        // 오른쪽으로 갈 수 있다면 오른쪽으로 이동한다.
        if (a[x][y + 1] == 0) {
            a[x][y + 1] = 9;
            y += 1;
        }
        // 오른쪽으로 갈 수 없다면 아래를 탐색해본다.
        else if (a[x][y + 1] == 1) {
            // 아래로 갈 수 있을 때
            if (a[x + 1][y] == 0) {
                a[x + 1][y] = 9;
                x += 1;
            }
            // 아래에 길이 막혔을 때
            else if (a[x + 1][y] == 1) {
                break;
            }
            // 아래에 먹이가 있을 때
            else if (a[x + 1][y] == 2) {
                a[x + 1][y] = 9;
                break;
            }
            else { break; }
        }
        else if (a[x][y + 1] == 2) {
            a[x][y + 1] = 9;
            break;
        }
        else { break; }
        }

    //cout << endl << endl;
    // 출력한다.
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            cout << a[i][j];
            cout << " ";
        }
        cout << endl;
        //cout << endl;
    }

    return 0;
}

 

 

심지어 콘솔창에서도 똑같이 나온다.

뭐가 문제인 걸까..

 

 

 

엔터와 스페이스 밀당으로 무한의 늪으로...

도대체 어디서 삑 사리가 난 걸까..

 

도저히 몰라서 알고리즘 스터디 팀원에게 도움을 청했다.

박재범덕후님이 문제점 두 가지를 알려주셨다.

 

1. 입력할 때 cout << endl;을 제거해주기

2. 시작점에 먹이가 있는 경우를 위해 

// 시작점이 2이면 끝낸다.
        if (a[1][1] == 2) {
            a[1][1] = 9;
            break;
        }
        // 시작점이 2가 아니면 9로 바꾼다.
        else { a[1][1] = 9; }

while문 시작 부분에 위 코드 추가해주기

 

 

정답 코드

#include <iostream>
using namespace std;

int main()
{
    // 2차원 배열 a 선언
    int a[10][10] = {0, };

    // 상자의 구조를 입력 받는다.
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            int t = 0;
            cin >> t;
            a[i][j] = t;
        }
        //cout << endl;
    }

    // 개미를 이동 시킨다.
    int x = 1;
    int y = 1;
    
    while (1) {

        // 시작점이 2이면 끝낸다.
        if (a[1][1] == 2) {
            a[1][1] = 9;
            break;
        }
        // 시작점이 2가 아니면 9로 바꾼다.
        else { a[1][1] = 9; }

        // 오른쪽으로 갈 수 있다면 오른쪽으로 이동한다.
        if (a[x][y + 1] == 0) {
            a[x][y + 1] = 9;
            y += 1;
        }
        // 오른쪽으로 갈 수 없다면 아래를 탐색해본다.
        else if (a[x][y + 1] == 1) {
            // 아래로 갈 수 있을 때
            if (a[x + 1][y] == 0) {
                a[x + 1][y] = 9;
                x += 1;
            }
            // 아래에 길이 막혔을 때
            else if (a[x + 1][y] == 1) {
                break;
            }
            // 아래에 먹이가 있을 때
            else if (a[x + 1][y] == 2) {
                a[x + 1][y] = 9;
                break;
            }
            else { break; }
        }
        else if (a[x][y + 1] == 2) {
            a[x][y + 1] = 9;
            break;
        }
        else { break; }
        }

    //cout << endl << endl;
    // 출력한다.
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            cout << a[i][j];
            cout << " ";
        }
        //cout << endl;
        cout << endl;
    }

    return 0;
}

 

오 끝났다