Problem Solving/SWEA

[SWEA] #1210 _ Ladder1

Grini 2019. 8. 28. 22:01

[Ladder1] https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

어쨋든 도착지는 한 군데이다.

따라서, 도착지부터 거꾸로 조건에 맞는 방법으로 올라가서 출발지를 찾으면 된다.

 

[ 소스 코드 ]

 

#include <cstdio>
#include <algorithm>
#define MAX 100 

using namespace std;

int dx[] = { -1, 1, 0 }, dy[] = { 0, 0, -1 };
int map[MAX + 1][MAX + 1];

int solve(int y, int x);
int main() {
	int test_num;
	pair<int, int> dest;

	for (int i = 0; i < 10; i++) {
		scanf("%d", &test_num);
		for (int j = 0; j < MAX; j++) {
			for (int k = 0; k < MAX; k++) {
				scanf("%d", &map[j][k]);
				if (map[j][k] == 2) dest = make_pair(j, k);
			}
		}
		printf("#%d %d\n", test_num, solve(dest.first, dest.second));
	}

	return 0;
}

int solve(int y, int x) {
	int tmp_x = x, tmp_y = y;
	int chk[MAX + 1][MAX + 1] = { 0, };

	chk[y][x] = 1;
	while (tmp_y != 0) {
		for (int i = 0; i < 3; i++) {
			tmp_x = x + dx[i];
			tmp_y = y + dy[i];

			if (tmp_x < 0 || tmp_y < 0 || tmp_x >= MAX || tmp_y >= MAX) continue;
			if (chk[tmp_y][tmp_x]) continue;
			if (map[tmp_y][tmp_x]) {
				chk[tmp_y][tmp_x] = 1;
				x = tmp_x;
				y = tmp_y;
				break;
			}
		}
	}
	return tmp_x;
}