본문 바로가기
C

코드업(CodeUp) 1099번

by 열지희공 2021. 6. 27.

CodeUp 1099번

문제

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

 

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

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

codeup.kr

 

풀이

10*10 크기의 미로상자 입력 -> 이중 for문을 이용해 2차원 배열에 입력받기

개미 이동 -> 2차원 배열의 인덱스를 바꾸며 탐색하기

                    해당 인덱스 배열의 값이 0 -> 배열의 값을 9로 바꾸고 오른쪽으로 1 이동 

                    해당 인덱스 배열의 값이 1 -> 왼쪽으로 1, 아래쪽으로 1 이동

                    해당 인덱스 배열의 값이 2 -> 배열의 값을 9로 바꾸고 종료

개미가 이동한 경로 출력 -> 이중 for문을 이용해 2차원 배열 출력하기

 

내 코드

#include<stdio.h>
int main() {
	int arr[10][10];

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

	int x = 1;
	int y = 1;

	while (1) {
	    if (x < 0 || y < 0 || x>10 || y>10) {
			break;
		}
		if (arr[x][y] == 2) {  //해당 인덱스 배열의 값이 2 
			arr[x][y] = 9;   //배열의 값을 9로 바꾸고 
			break;  //종료
		}
		else {
			if (arr[x][y] == 0) {  //해당 인덱스 배열의 값이 0
				arr[x][y] = 9;  //배열의 값을 9로 바꾸고
				y++;  //오른쪽으로 1 이동

			}
			else {  //해당 인덱스 배열의 값이 1
				y--;  //왼쪽으로 1
				x++;  //아래쪽으로 1 이동
			}
		}
	}
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

 

코드를 비쥬얼스튜디오에서 완성시킨 뒤 제출했는데 실행중에러로 segmentation fault가 발생했다고 해서 이를 해결하는 시간이 문제를 푼 시간보다 더 오래걸렸다.

Runtime Error:Segmentation fault
설명:
Segmentation fault:세그먼트 에러입니다. 배열의 잘못된 인덱스 지정, 포인터의 잘못된 사용, 또는 잘못된 메모리 참조가 원인입니다.

1. 주로 배열의 크기를 벗어난 영역을 접근할 때 발생합니다.(음수인덱스, 배열의 최대크기-1 보다 큰 인덱스를 지정할때 발생)
2. scanf 입력처리가 잘못된 경우도 해당됩니다. (예: scanf("%d", a); // a앞에 &를 붙이지 않은 경우
3. STL같은 동적인 자료구조를 생성할 때에도 주의해야 합니다.
4. freopen, fopen 등의 파일처리 부분을 삭제하지 않았을 경우에도 해당됩니다. 해당부분을 주석처리하기 바랍니다.

내 코드에서는 배열이 사용되었기에 배열의 사용부분에서 문제점을 찾아보았다.

주로 배열의 크기를 벗어난 영역을 접근할 때 발생한다는 것에서 힌트를 얻었고,

입력된 값에 따라 인덱스가 배열의 크기를 벗어난 0미만의 값이나 10초과의 값이 될 수도 있겠다 판단하여 

 if (x < 0 || y < 0 || x>10 || y>10) {
break;
}

이부분을 추가하였다.