<미완>세번이내에사과를먹자

도경원·2023년 1월 8일
0

알고리즘스터디_C++

목록 보기
6/42

문제

2주차 [백준] 세번이내에사과를먹자

접근

위 코드는 아직 정답을 내놓지 못한다
논리는 맞다고 생각했는데 뭔가 놓친 부분이 있는 것 같다

풀이

(제출시 아직 오답나옴 - 친구가 수정해 준 걸로 수정해보기)

#include <iostream>
#include <vector>
using namespace std;

int answer = 0;
int map[5][5] = { 0 };
int dx[4] = { -1, 1, 0, 0 };
int dy[4] = { 0, 0, -1, 1 };

void Dfs(pair<int, int> pos, int depth, int count) {
	int x = pos.first;
	int y = pos.second;

	// 탐색하지 않을 조건
	if (x >= 5 || y >= 5) return;
	if (x < 0 || y < 0) return;
	if (map[x][y] == -1) return;

	// 사과찾기
	if (map[x][y] == 1) count++; // 사과가 있다면 카운트 더하기
	if (depth <= 3) { 		    // depth가 3보다 작거나 같은데 
		if (count >= 2) {       // 2개 이상의 사과 > 1을 반환, 리턴
			answer = 1;
			return;
		}
	}
	else { return; } // depth가 3을 넘어가면 더 계산한 필요가 없다

	map[x][y] = -1;  // 지나간 길은 장애물이 생긴다

	for (int i = 0; i < 4; i++) {
		if (answer == 1) return; // 정답이 나왔으면 더이상 반복하지 않는다
		int nx, ny;
		nx = x + dx[i];
		ny = y + dy[i];

		Dfs(make_pair(nx, ny), depth + 1, count);
	}
}
int main() {
	//map 데이터 업데이트
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			cin >> map[i][j];
		}
	}

	int x, y;
	cin >> x;
	cin >> y;
	//DFS 시작
	Dfs(make_pair(x, y), 0, 0);

	//정답출력
	cout << answer;
}



profile
DigitalArtDeveloper

0개의 댓글