teddy8 Full Stack Software Engineer

CodeUp - 기초100제(1099)

2019-06-23
teddy8

문제

URL : https://codeup.kr/problemsetsol.php?psid=23


소스코드

/* 
문제 : 성실한 개미
[input]
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 1 1 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 1 2 0 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
[output]
1 1 1 1 1 1 1 1 1 1
1 9 9 1 0 0 0 0 0 1
1 0 9 1 1 1 0 0 0 1
1 0 9 9 9 9 9 1 0 1
1 0 0 0 0 0 9 1 0 1
1 0 0 0 0 1 9 9 9 1
1 0 0 0 0 1 2 0 9 1
1 0 0 0 0 1 0 0 9 1
1 0 0 0 0 0 0 0 9 1
1 1 1 1 1 1 1 1 1 1
[설명]
10 * 10 크기의 미로 상자의 구조와 먹이의 위치가 입력되면
성실한 개미가 이동한 경로를 9로 표시해 출력한다.
개미집은 반드시 (2, 2)에서 시작된다.
개미는 먹이(2)를 찾았거나, 더 이상 움직일 수 없을 때까지 오른쪽 또는 아래쪽으로만 움직였다.
미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고,
먹이가 2로 표시되어 주어질 때, 똑똑한 개미의 이동 경로를 예상해보자.
단, 가장 아래의 가장 오른쪽에 도착한 경우나, 더 이상 움직일 수 없는 경우, 
또는 먹이를 찾은 경우에는 그 곳에 머무른다고 가정한다.
미로의 테두리는 모두 벽으로 되어있다. 
*/

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
	int a[10][10], failCount = 0;
	srand((unsigned int)time(NULL));

	// 개미굴 입력
	for (int i = 0; i < 10; i++) {
		for (int k = 0; k < 10; k++) {
			cin >> a[i][k];
		}
	}

	int start_x = 1;
	int start_y = 1;
	a[start_x][start_y] = 9;

	while (true)
	{
		// 오른쪽과 아래 둘 다 갈 수 있을 경우만 난수생성
		if (!(a[start_x + 1][start_y] == 1) && !(a[start_x][start_y + 1] == 1)) {
			if (rand() % 2 == 0) // 랜덤으로 0이 나오면 아래로
			{
				if (a[start_x][start_y + 1] == 2) { // 보물인 경우
					cout << "보물을 찾았습니다." << endl;
					break;
				}
				else {
					a[start_x + 1][start_y] = 9;
					start_x++;
				}
			}
			else  // 1이 나오면 오른쪽으로
			{
				if (a[start_x + 1][start_y] == 2) { // 보물인 경우
					cout << "보물을 찾았습니다." << endl;
					break;
				}
				else {
					a[start_x][start_y + 1] = 9;
					start_y++;
				}
			}
		}
		// 오른쪽만 갈 수 있으면 오른쪽으로 이동
		else if (!(a[start_x + 1][start_y] == 1)) {
			a[start_x + 1][start_y] = 9;
			start_x++;
		}
		// 아래쪽만 갈 수 있으면 아래쪽으로 이동
		else if (!(a[start_x][start_y + 1] == 1)) {
			a[start_x][start_y + 1] = 9;
			start_y++;
		}
		// 둘 다 갈 수 없으면
		else {
			cout << "더 이상 이동할 수 없습니다." << endl;
			break;
		}
	}

	// 개미굴 출력
	for (int i = 0; i < 10; i++) {
		for (int k = 0; k < 10; k++) {
			cout << a[i][k] << " ";
		}
		cout << endl;
	}

	return 0;
}


Comments

Content