본문 바로가기
알고리즘/SWEA

[SWEA] 1210. [S/W 문제해결 기본] 2일차 - Ladder1

by hyerann 2019. 4. 30.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

재귀 함수를 통해서 사다리 타는 과정을 구현하였다.

왼쪽, 오른쪽의 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로 복구
}

댓글