https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh
재귀 함수를 통해서 사다리 타는 과정을 구현하였다.
왼쪽, 오른쪽의 index에 해당하는 값을 검사하여 1인 경우 방향 전환을 하므로 x 좌표의 index를 증감시킨 후 재귀 함수의 인자로 전달하여 왼쪽이나 오른쪽으로 이동하고, 방향 전환을 하지 않는 경우 y 좌표의 index를 증가시킨 후 재귀 함수의 인자로 전달하여 아래로 이동하게 하였다.
그렇게 반복하다가 y 좌표의 index가 99 일 때의 값을 확인하여 2인 경우를 찾았다.
#include <iostream>
#include <ios>
using namespace std;
int ladder[100][100], tempRes;
int getResult();
void getLaddling(int y, int x);
int main() {
cin.tie(0); ios::sync_with_stdio(0);
for (int i = 0; i < 10; i++) {
int tc; cin >> tc;
for (int y = 0; y < 100; y++) {
for (int x = 0; x < 100; x++) {
cin >> ladder[y][x];
}
}
cout << '#' << tc << ' ' << getResult() << "\n";
}
return 0;
}
int getResult() {
for (int i = 0; i < 100; i++) {
if (ladder[0][i]) {
getLaddling(0, i);
if (tempRes == 2) return i;
}
}
}
void getLaddling(int y, int x) {
if (y == 99) { // 도착
tempRes = ladder[y][x];
return;
}
ladder[y][x] = 0; // 지나온 곳 0으로 바꾸기
if (x != 0 && ladder[y][x - 1]) getLaddling(y, x - 1); // 왼쪽
else if (x != 99 && ladder[y][x + 1]) getLaddling(y, x + 1); // 오른쪽
else getLaddling(y + 1, x); // 아래
ladder[y][x] = 1; // 다시 1로 복구
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 4406. 모음이 보이지 않는 사람 (0) | 2019.05.03 |
---|---|
[SWEA] 1211. [S/W 문제해결 기본] 2일차 - Ladder2 (0) | 2019.05.01 |
[SWEA] 1209. [S/W 문제해결 기본] 2일차 - Sum (0) | 2019.04.29 |
SW 문제해결 기본 - Array 2 (0) | 2019.04.29 |
[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten (0) | 2019.04.27 |
댓글