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;
}