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;
}
이부분을 추가하였다.