본문 바로가기
PS/SWEA

[SWEA 1210] (D4) Ladder1

by 방준이 2020. 5. 19.
반응형

문제  : (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[] = { -1010 };
const int dy[] = { 010-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
반응형

'PS > SWEA' 카테고리의 다른 글

[SWEA 5653] 줄기세포배양  (0) 2020.06.17
[SWEA 5644] 무선 충전  (0) 2020.06.07
[SWEA 2382] 미생물 격리  (0) 2020.06.03
[SWEA 2477] 차량 정비소  (0) 2020.05.25
[SWEA 1204] (D2) 최빈수 구하기  (0) 2020.05.20