본문 바로가기
문제 해결/CodeUp

[CodeUp] [C++] [기초 100제] 1099번 성실한 개미

by WSLim_97 2022. 12. 6.
반응형

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

 

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

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

codeup.kr


코드

#include <iostream>
using namespace std;

int a[100][100] = { };
int input;

int main() {

	for (int i = 1; i <= 10; i++) {
		for (int j = 1; j <= 10; j++) {
			cin >> input;
			a[i][j] = input;
		}
	}

	int x = 2, y = 2;

	while (true) {
		if (a[x][y] == 2) {	// 맨 처음 a[2][2]가 2일 때
			a[x][y] = 9;
			break;
		}
		else {
			a[x][y] = 9;
		}

		if (a[x][y + 1] == 1) {
			if (a[x + 1][y] == 1) {		// 더이상 이동할 수 없을 때
				break;
			}
			else if (a[x + 1][y] == 0) {
				a[x + 1][y] = 9;
				x = x + 1;
			}
			else {
				a[x + 1][y] = 9;		// 아래쪽에서 2를 만났을 때
				break;
			}
		}
		else if (a[x][y + 1] == 0) {
			a[x][y + 1] = 9;
			y = y + 1;
		}
		else {				// 오른쪽에서 2를 만났을 때
			a[x][y + 1] = 9;
			break;
		}
	}

	for (int i = 1; i <= 10; i++) {
		for (int j = 1; j <= 10; j++) {
			cout << a[i][j] << " ";
		}
		cout << "\n";
	}

	return 0;
}

풀이

10 * 10 크기의 미로에서 개미가 먹이를 찾아 길을 가는 것을 출력하는 문제이다.

 

개미는 오른쪽 혹은 아래로 이동이 가능하고 오른쪽을 먼저 체크한다. 1은 개미가 갈 수 없는 벽이고 0으로만 이동이 가능하다.

 

먹이 즉 2를 찾거나, 더 이상 움직일 수 없는 경우에는 개미의 이동이 멈추도록 한다.

 

경우의 수

  • 맨 처음에 2를 만난 경우.
  • 오른쪽이 0이고 오른쪽으로 이동하는 경우.
  • 오른쪽이 2이고 오른쪽으로 이동 후 종료하는 경우.
  • 오른쪽이 벽으로 막혀 있고 아래로 이동하는 경우.
  • 오른쪽이 벽이고 아래쪽도 벽이어서 멈추는 경우.
  • 오른쪽이 벽이고 아래쪽이 2여서 이동 후 종료하는 경우.

위 경우의 수에 따라 개미의 좌표를 이동시키고 그 좌표의 값에 9를 저장한다.

반응형