c언어 2차원 배열 기초문제

c언어 2차원 배열 기초문제

작성일 2023.08.15댓글 3건
    게시물 수정 , 삭제는 로그인 필요

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

#include <stdio.h>

int main()
{
    int ant[12][12];
    int i, j;

    for(i = 1;i <= 10;i++)
    {
        for(j = 1;j <= 10;j++)
        {
            scanf("%d", &ant[i][j]);
        }
    }

    i = 2;
    j = 2;

    while(1)
    {
        if(ant[i][j] == 2)
        {
            ant[i][j] = 9;

            break;
        }

        ant[i][j] = 9;

        if(ant[i][j + 1] == 1)
        {
            i++;

            continue;
        }

        j++;
    }

    for(i = 1;i <= 10;i++)
    {
        for(j = 1;j <= 10;j++)
        {
            printf("%d ", ant[i][j]);
        }

        printf("\n");
    }

    return 0;
}

이렇게 코드를 짰는데 코드블럭에선 실행이 되는데
소스를 제출하니까 
*** stack smashing detected ***: terminated
이렇게 뜨면서 컴파일 에러가 뜨네요
뭐가 문제일 까요?


#c언어 2차원 배열 #c언어 2차원 배열 초기화 #c언어 2차원 배열 입력받기 #c언어 2차원 배열 동적할당 #c언어 2차원 배열 포인터 #c언어 2차원 배열 출력 #c언어 2차원 배열 매개변수 #c언어 2차원 배열 정렬 #c언어 2차원 배열 문자열 입력받기 #c언어 2차원 배열 입력

profile_image 익명 작성일 -

안녕하세요^^

while문 안의 조건이 문제가 있는 것 같네요.

if(ant[i][j] == 2)

if(ant[i][j + 1] == 1)

두 조건에 해당하는 값이 없다면

j++; 이 코드에 의해 j의 값이 계속 증가하다가

if(ant[i][j + 1] == 1)

j에 해당하는 배열의 크기가 12인데 j의 값이 12가 되면 [j + 1]이 코드에 의해 13이 되면서 오버 플로우가 발생하겠네요.

조건을 바꿔주시거나

j++; j의 값을 증가시킨 후

if(j == 12) break; 이런 식으로 while문을 끝내주는 조건이 필요할 것 같네요.

또는

if(j == sizeof(ant[0]) / sizeof(int)) 가로줄의 크기를 구해서 j와 비교해도 되겠네요.

테스트해 보시길 바랍니다.

조금이나마 도움이 되셨길 바랍니다.

좋은 하루 되세요^^

profile_image 익명 작성일 -

전문 상담사 - 라오 - 입니다.

정성 스럽게 작성하여 도움될수 있는 수기 답변 드리겠습니다.^^

정성스런 답변:

코드를 살펴보니, 입력으로 12x12 크기의 2차원 배열을 받는 것 같습니다. 그런데 문제에서는 10x10 크기의 배열을 입력으로 받도록 되어있는 것 같습니다.

그리고 2가 있는 위치에서 출발하여 주어진 규칙에 따라 이동하는 것으로 보입니다. 설명에 따르면, 현재 위치에서 오른쪽 또는 아래쪽으로 이동하되, 이동하려는 칸이 1인 경우에는 아래로 이동하고, 0인 경우에는 오른쪽으로 이동하면 됩니다. 마지막으로 도착한 위치의 값을 9로 바꾸면 됩니다.

그런데 결과적으로는 스택 오버플로우 현상으로 인해 컴파일 에러가 발생하는 것으로 보입니다. 이는 배열의 인덱스 범위를 벗어나서 발생하는 문제입니다.

코딩 문제 사이트에서는 배열의 크기와 인덱스 범위를 잘 확인해주시기 바랍니다. 인덱스는 0부터 시작하며, 문제에서 요구하는 배열의 크기로 설정해야 합니다. 이렇게 수정 후에 다시 소스를 제출하시면 정상적으로 실행될 것입니다.

♥♥♥♥답변에 만족하셨다면 답변확정을 추가로 궁금하신점이 있으시다면 추가질문을 부탁드리겠습니다.♥♥♥♥

좋은하루되세요!

https://mhna98.com/

profile_image 익명 작성일 -

접근 방식이 잘못되었습니다.

문제는 그래프 알고리즘을 사용하셔서 푸셔야 합니다.

BFS를 사용하는 문제로 보이고 문제의 조건을 보시면 0 : 이동 가능한 곳, 1 : 이동이 불가능한 곳, 2 : 최종 도착지 입니다.

즉, 이동할 곳이 0이거나 2일 경우는 이동이 가능하지만 1은 만나면 되돌아가는 곳입니다.

하지만 while문 내의 코드를 보면 오른쪽으로 이동할 때 1을 만날 경우 아래로 이동시키는 코드이지만 아래가 막혀있을 경우 오류가 발생할 것입니다.

아래는 반례입니다.

1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1

c언어 2차원 배열 기초문제

... ^^ 정성스런 답변: 코드를 살펴보니, 입력으로 12x12 크기의 2차원 배열을 받는 것 같습니다. 그런데 문제에서는 10x10 크기의 배열을 입력으로 받도록...

c언어 2차원배열 %ld관한 질문

요즘 c언어를 배우고 있는데, int를 쓰면 %d를 써야한다고 알고있는데 2차원 배열을 배우는... 그냥 %d써도 웬만한 경우에서 문제는 없습니다.

c언어 2차원배열 질문

... 어디가 문제인지 제대로 동작하지 않습니다. 어떻게 수정해야할까요? 코드를 보면 2차원 배열을 동적으로 할당하고 초기화하는 부분이...

c언어 2차원기초배열

c언어 2차원 배열[4][5] count=count+1 써서 코드 좀 짜주세요 #include <stdio.h> int main() { int num[4][5], i, j; int count = 0; for(i=0; i<4; i...

c언어 2차원 배열 문제

첫번째 사진은 1차원 배열으로 한 문제이고 두번째 사진이 첫번째 과제를 이용하여 2차원 배열로 하라는 문제인데 세번째 사진을 보듯이 막혀버려서 앞으로 나아갈수가...

C언어 동적할당 2차원 배열 문제...

... // 2차원 배열의 각 요소에 i + j 값을 할당 } } for (int i = 0; i < row; i++) // 세로 크기만큼 반복 { for (int j = 0; j < col; j++) // 가로 크기만큼 반복 { printf...

c언어 2차원 배열 이해

... 5 4 3 2 1 10 9 8 7 6 15 14 13 12 11 20 19 18 17 16 25 24 23 22 21 입력이 n인 경우의 2차원 배열을 출력해보자. 이게 문제인데 소스 파일을 위처럼 쓰면 맞게 출력은...