[SW Expert Academy] 1210. Ladder1
나의 풀이
1. 도착지점인 마지막 행에서 2를 찾아 위로 올라가면서 출발지점을 찾아나간다.
2. 왼쪽, 오른쪽, 위쪽 순으로 탐색하며 사다리의 범위를 벗어나는지, 0인지를 확인하고 continue 한다.
3. 지나간 곳을 0으로 바꾸고 현재 지점을 갱신한 후 반복한다.
4. 가장 윗 행에 도달했을 때, 그 행의 열의 좌표를 반환한다.
나의 코드
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | // [S/W 문제해결 기본] 1210. 2일차 - Ladder1 #include<iostream> #include<cstring> using namespace std; int ladder[101][101]; // 왼쪽, 오른쪽, 위 int dx[3] = {0, 0, -1}; int dy[3] = {-1, 1, 0}; int finddeparture(int _x, int _y) { int x = _x; int y = _y; while (1) { if (x == 0) return y; for (int i = 0; i < 3; i++) { int mx = x + dx[i]; int my = y + dy[i]; if (mx < 0 || mx >= 100 || my < 0 || my >= 100) continue; if (ladder[mx][my] == 0) continue; x = mx; y = my; ladder[mx][my] = 0; break; } } return y; } int main(void) { int num; for (int T = 1; T <= 2; T++) { memset(ladder, 0, sizeof(int) * 101 * 101); cin >> num; for (int i = 0; i < 100; i++) { for (int j = 0; j < 100; j++) { cin >> ladder[i][j]; } } for (int i = 0; i < 100; i++) { if (ladder[99][i] == 2) { int ans = finddeparture(99, i); cout << '#' << num << ' ' << ans << '\n'; break; } } } return 0; } | cs |
'Problem > 시뮬레이션' 카테고리의 다른 글
[C/C++] BOJ 5373 :: 큐빙 (3) | 2019.03.09 |
---|---|
[C/C++] BOJ 16235 :: 나무 재테크 (0) | 2019.03.04 |
[C/C++] BOJ 1331 :: 나이트 투어 (0) | 2019.02.08 |
[C/C++] BOJ 13901 :: 로봇 (0) | 2019.02.07 |
[C/C++] BOJ 1986 :: 체스 (0) | 2019.02.06 |