문제 : 개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직인다.
(오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.)
미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고, 먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.
단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더이상 이동하지 않고 그 곳에 머무른다고 가정한다.
미로 상자의 테두리는 모두 벽으로 되어 있으며, 개미집은 반드시 (2, 2)에 존재하기 때문에 개미는 (2, 2)에서 출발한다.
정답 :
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
int arr[10][10];
int m = 1, n = 1;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
scanf("%d ", &arr[i][j]);
}
}
while (1)
{
if (arr[m][n] == 0)
arr[m][n] = 9;
else if (arr[m][n] == 2)
{
arr[m][n] = 9;
break;
}
if ((m == 9 && n == 9) || (arr[m][n + 1] == 1 && arr[m + 1][n] == 1))
break;
if (arr[m][n + 1] != 1)
n++;
else if (arr[m + 1][n] != 1)
m++;
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
먼저 10*10 크기의 배열을 선언하고, for 문을 중첩해 10*10 크기의 미로 상자의 구조를 입력받는다.
그리고 개미집의 위치를 m=1, n=1로 지정해 준 다음 while 문을 통해 m, n을 이동해준다.
while 문에서는 먼저 현재 배열 값이 0일 경우 9로 변경해주고, 마찬가지로 2일 경우엔 9로 변경한 다음 반복문을 탈출한다.
그리고 if 문을 통해 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움질일 수 없는 경우엔 반복문을 탈출시킨다.
또 현재 위치에서 오른쪽이 1(벽 또는 장애물)이 아닌 경우 오른쪽으로 이동하고, 그렇지 않고 아래쪽이 1이 아닐 경우엔 아래쪽으로 이동시킨다.
마지막엔 for 문을 중첩해 10*10 크기의 미로 상자를 출력한다.
'Programming Languages > C' 카테고리의 다른 글
[P4C] C언어 코딩 도장 : UNIT 35 (0) | 2021.03.03 |
---|---|
[P4C] C언어 코딩 도장 : UNIT 34 (0) | 2021.03.03 |
[P4C] CodeUp 1098 : [기초-2차원배열] 설탕과자 뽑기 (0) | 2021.02.25 |
[P4C] CodeUp 1097 : [기초-2차원배열] 바둑알 십자 뒤집기 (0) | 2021.02.25 |
[P4C] CodeUp 1094 : [기초-1차원배열] 이상한 출석 번호 부르기2 (0) | 2021.02.25 |