16197번 두 동전

동도리동·2021년 8월 6일
0

코딩테스트

목록 보기
3/76
#include <iostream>
using namespace std;
int n, m;
string map[21];
int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };
int DFS(int cnt, int x1, int y1, int x2, int y2) {
	
	if (cnt==11) {
		return -1;
	}
	bool flag1 = false, flag2 = false;
	if (x1 >= n || x1 < 0 || y1<0 || y1 >= m) flag1 = true;
	if (x2 >= n || x2 < 0 || y2<0 || y2 >= m) flag2 = true;
	if(flag1 &&flag2) return -1;
	if (flag1 || flag2 ) return cnt;
	int ans = -1;
	for (int i = 0; i < 4; i++) {
		int xx1 = x1 + dx[i];
		int yy1 = y1 + dy[i];
		int xx2 = x2 + dx[i];
		int yy2 = y2 + dy[i];
		if (xx1 >= 0 && xx1 < n && yy1 < m && yy1 >= 0 && map[xx1][yy1] == '#') {
			xx1 = x1;
			yy1 = y1;
		}
		if (xx2 >= 0 && xx2 < n && yy2 < m && yy2 >= 0 && map[xx2][yy2] == '#') {
			xx2 = x2;
			yy2 = y2;
		}

		int temp = DFS(cnt + 1, xx1, yy1, xx2, yy2);
		if (temp == -1) continue;
		if (ans == -1 || ans > temp) ans = temp;
	}
		
	
	return ans;
	
}
int main() {
	//freopen("in1.txt", "rt", stdin);
	int x1, x2, y1, y2;
	x1 = y1 = x2 = y2 = -1;
	cin >> n>> m;
	//scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {

		cin >> map[i];
		for (int j = 0; j < m; j++) {
			if (map[i][j] == 'o') {
				if (x1==-1) {
					x1 = i, y1 = j;
				}
				else {
					x2 = i, y2 = j;
					
				}
				map[i][j] = '.';
			}
		}
	}
	
	cout << DFS(0, x1, y1, x2, y2) << '\n';
	//printf("%d", DFS(0, x1, x2, y1, y2));
	return 0;
}

scanf, printf을 쓰면 자꾸 틀렸다고 나온다... cin, cout을 사용해야겠다.

profile
긍정코딩세상

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN