Muscardinus

사다리 조작 본문

알고리즘 문제/[삼성 SW 역량 테스트 기출 문제]

사다리 조작

Muscardinus 2020. 8. 29. 16:48
728x90

https://www.acmicpc.net/problem/15684

 

15684번: 사다리 조작

사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선

www.acmicpc.net

#include <iostream>

using namespace std;

int n, m, h, ret;
int map[31][11];

bool check() {
	bool ret = true;
	for (int i = 1; i <= n; i++) {
		int pos = i;
		for (int j = 0; j <= h; j++) {
			if (map[j][pos] == 1) pos++; //오른쪽 이동
			else if (map[j][pos - 1] == 1) pos--; //왼쪽 이동
		}
		if (pos != i) { //자기 번호로 안감
			return ret = false;
		}
	}
	return ret;
}

void dfs(int cnt, int y, int x) {
	if (cnt >= ret) return;
	if (check()) {
		ret = cnt;
		return;
	}
	if (cnt == 3) return;
	for (int i = y; i <= h; i++) {
		for (int j = x; j < n; j++) {
			if (map[i][j] == 0 && map[i][j - 1] == 0 && map[i][j + 1] == 0) {
				map[i][j] = 1;
				dfs(cnt + 1, i, j);
				map[i][j] = 0;
			}
		}
		x = 1;
	}
}

int main() {
	cin >> n >> m >> h;
	int a, b;
	for (int i = 0; i < m; i++) {
		cin >> a >> b;
		map[a][b] = 1;
	}
	ret = 4;
	dfs(0, 1, 1);
	if (ret == 4) ret = -1;
	cout << ret << "\n";
	return 0;
}
728x90

'알고리즘 문제 > [삼성 SW 역량 테스트 기출 문제]' 카테고리의 다른 글

치킨 배달  (0) 2020.08.30
드래곤 커브  (0) 2020.08.29
감시  (0) 2020.08.28
톱니바퀴  (0) 2020.08.27
경사로  (0) 2020.08.26
Comments