[SWEA 1210] (D4) Ladder1
반응형
문제 : (D4) 1210 - Ladder1
[ 문제 출처 ] : SW Expert Academy
[ 문제 풀이 ]
이 문제는 시뮬레이션 문제이다
문제에서 구하고자 하는 값은 도착점 2에 대응 되는 출발점의 인덱스 번호를 구하는 것이다
바로 무작정 문제를 풀려고 한다면 위에서 부터
출발 가능 한 점에서 시작 하여시뮬레이션을 하면서 2를 찾으려 할 것이다
즉, 모든 방법을 모두 시도 해보려 할 것이다 하지만 이는 매우 비효율적이다
사다리 타기 게임은 많이들 해봐서 알수 있듯이 출발점과 도착점은 1대1 대응 이다
따라서 반대로 2에서 출발하면 구하고자 하는 값을 단 한번의 시도로 찾을 수 있을 것이다
이 문제는 방향을 코드에 적절하게 구현 해야 하며
조금신경 써야할 부분이라고 하면은 배열의 범위에 값에 벗어나지 않도록 적절한 조취를 취해 주어야 한다.
소스코드를 들여다 보면 쉽게 이해 할 수 있을 것이다!
[ 소스 코드 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include<iostream>
using namespace std;
const int MAX = 100;
int map[MAX][MAX];
int sx, sy;
const int dx[] = { -1, 0, 1, 0 };
const int dy[] = { 0, 1, 0, -1 };
enum Dir { U, R, D, L };
bool isInRange(int x, int y) {
if (0 > x || x >= MAX || 0 > y || y >= MAX) return false;
return true;
}
int solve() {
int x = sx, y = sy;
while (true) {
x += dx[U], y += dy[U];
if (!isInRange(x, y)) return y;
// 위로 올라 가는 도중에 왼쪽이나 오른쪽으로 갈 수 있다면 이동 해야 한다!
// 언제 까지 이동 해야 하는지는 0을 만나거나 범위를 벗어 날 때 까지!
if (isInRange(x + dx[L], y + dy[L]) && map[x + dx[L]][y + dy[L]] == 1) {
while (isInRange(x + dx[L], y + dy[L]) && map[x + dx[L]][y + dy[L]] == 1) x += dx[L], y += dy[L];
}
else if (isInRange(x + dx[R], y + dy[R]) && map[x + dx[R]][y + dy[R]] == 1) {
while (isInRange(x + dx[R], y + dy[R]) && map[x + dx[R]][y + dy[R]] == 1) x += dx[R], y += dy[R];
}
}
return -1;
}
int main(int argc, char** argv) {
ios_base::sync_with_stdio(0), cin.tie(0);
for (int test_case = 1; test_case <= 10; ++test_case) {
int num; cin >> num;
for (int i = 0; i < MAX; i++) {
for (int j = 0; j < MAX; j++) {
cin >> map[i][j];
if (map[i][j] == 2) sx = i, sy = j;
}
}
int ans = solve();
cout << "#" << test_case << " " << ans << '\n';
}
return 0;
}
|
cs |
반응형
댓글
이 글 공유하기
다른 글
-
[SWEA 5644] 무선 충전
[SWEA 5644] 무선 충전
2020.06.07 -
[SWEA 2382] 미생물 격리
[SWEA 2382] 미생물 격리
2020.06.03 -
[SWEA 2477] 차량 정비소
[SWEA 2477] 차량 정비소
2020.05.25 -
[SWEA 1204] (D2) 최빈수 구하기
[SWEA 1204] (D2) 최빈수 구하기
2020.05.20