πŸ“• Algorithm/Solved

[μ•Œκ³ λ¦¬μ¦˜ 랩슀] rook (C++, μ™„μ „ 탐색)

ν•œμ½”λ”© 2020. 7. 9. 13:28
728x90
728x90

문제

μ²΄μŠ€μ—μ„œ λ£©μ΄λΌλŠ” 기물은 λ§‰ν˜€μžˆμ§€λ§Œ μ•ŠμœΌλ©΄ 룩의 μœ„μΉ˜μ—μ„œ 같은 ν–‰, 같은 열에 ν•΄λ‹Ήν•˜λŠ” μΉΈ 쀑 ν•˜λ‚˜λ‘œ ν•œ 번 이동할 수 μžˆλ‹€. 단, νŠΉμ • 칸이 λ§‰ν˜€μžˆλ‹€λ©΄ κ·Έ μΉΈμ—μ„œλΆ€ν„° 더 λ‚˜μ•„κ°ˆ μˆ˜λŠ” μ—†λ‹€. λ§Œμ•½ 룩이 μ•„λž˜ κ·Έλ¦Όκ³Ό 같이 5ν–‰ 4열에 μ‘΄μž¬ν•˜κ³  같은 행열에 기물이 μ—†λ‹€λ©΄ 5ν–‰μ΄λ‚˜ 4열에 μ‘΄μž¬ν•˜λŠ” μΉΈ 쀑 μ–΄λ””λ‘œλ“  갈 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, 5ν–‰ 2μ—΄ ν˜Ήμ€ 1ν–‰ 4μ—΄λ‘œ 움직일 수 μžˆλ‹€. 차둀에 주어진 이동 νšŸμˆ˜λŠ” ν•œ λ²ˆμ΄λ―€λ‘œ 이동이 μ™„λ£Œλ˜μ—ˆλ‹€λ©΄ μƒλŒ€λ°©μ˜ μ°¨λ‘€λ‘œ λ„˜μ–΄κ°„λ‹€.

μ²΄μŠ€λŠ” ν‚Ήλ§Œ 작히면 μ§€κ²Œ λ˜λŠ” κ²Œμž„μ΄λ‹€. κ·Έ μ€‘μ—μ„œλ„ μ•Œλž©μ΄λŠ” 룩으둜 인해 κ²Œμž„μ„ μ§€λŠ” 것을 κ·Ήλ„λ‘œ μ‹«μ–΄ν•œλ‹€!

 

주어진 체슀판의 μƒνƒœμ—μ„œ ν˜„μž¬ μ°¨λ‘€κ°€ μƒλŒ€μ˜ 차둀일 λ•Œ, 이번 차둀에 μ•Œλž©μ΄μ˜ 킹이 μƒλŒ€λ°©μ˜ λ£©μ—κ²Œ 작힐 κ°€λŠ₯성이 μžˆλŠ”μ§€ μ•Œμ•„λ³΄μž.

 

μž…λ ₯

8쀄에 걸쳐 8x8 체슀판의 μƒνƒœκ°€ 주어진닀. μ΄λ•Œ 0은 기물이 μ—†λŠ” μƒνƒœμ΄κ³ , 1은 μ•Œλž©μ΄μ˜ 킹을 μ˜λ―Έν•˜κ³ , 2λŠ” μƒλŒ€μ˜ 룩을 μ˜λ―Έν•˜λ©° 3은 κ·Έ μ™Έ λ‹€λ₯Έ 기물듀을 μ˜λ―Έν•œλ‹€. (킹은 ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•˜λ©°, μƒλŒ€μ˜ 룩은 μ΅œλŒ€ 2κ°œκΉŒμ§€ μžˆμ„ 수 μžˆλ‹€. κ·Έ μ™Έ 기물듀은 μ΅œλŒ€ 29κ°œκΉŒμ§€ μžˆμ„ 수 μžˆλ‹€.)

 

좜λ ₯

킹이 λ£©μ—κ²Œ 작힐 κ°€λŠ₯성이 있으면 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.

 

 


#include <iostream>
#include <vector>

using namespace std;

typedef struct loc {
	int x;
	int y;
}loc;

int main() {

	vector< vector<int> > arr(8, vector<int>(8, 0));

	loc king;
	loc look;
	vector<loc> kimul;

	for (int i = 0; i < 8; i++) {
		for (int j = 0; j < 8; j++) {
			cin >> arr[i][j];

			if (arr[i][j] == 1) {
				king.x = i;
				king.y = j;
			}
			else if (arr[i][j] == 2) {
				look.x = i;
				look.y = j;
			}
			else if (arr[i][j] == 3) {
				loc tmp;
				tmp.x = i;
				tmp.y = j;
				kimul.push_back(tmp);
			}
		}
	}

	if (king.x == look.x) {

		int max, min;

		if (king.y > look.y){
			max = king.y;
			min = look.y;
		}
		else {
			max = look.y;
			min = king.y;
		}

		for (int i = 0; i < kimul.size(); i++) {

			if (kimul[i].x == king.x && (kimul[i].y > min && kimul[i].y < max)) {
				cout << 0 << endl;
				return 0;
			}
		}
	}
	else if (king.y == look.y) {

		int max, min;

		if (king.x > look.x) {
			max = king.x;
			min = look.x;
		}
		else {
			max = look.x;
			min = king.x;
		}

		for (int i = 0; i < kimul.size(); i++) {

			if (kimul[i].y == king.y && (kimul[i].x > min && kimul[i].x < max)) {
				cout << 0 << endl;
				return 0;
			}
		}
	}
	else {
		cout << 0 << endl;
		return 0;
	}

	cout << 1 << endl; 
	return 0;
} 

μ™„μ „ νƒμƒ‰μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλŠ” λ¬Έμ œμž…λ‹ˆλ‹€. κ²©μžνŒμ„ μž…λ ₯ λ°›μœΌλ©΄μ„œ ν‚Ή, 룩, κΈ°λ¬Όλ“€μ˜ μ’Œν‘œλ“€μ„ μ €μž₯ν•©λ‹ˆλ‹€.

 

ν‚Ήκ³Ό 룩의 x λ˜λŠ” yκ°€ κ°™λ‹€λŠ” 것은 μš°μ„  룩이 킹을 μ œμ••ν•  수 μžˆλŠ” κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€. κ°™μ§€ μ•Šμ€ κ²½μš°λŠ” 0을 좜λ ₯ν•©λ‹ˆλ‹€.

 

λ§Œμ•½ κ°™λ‹€λ©΄, κ·Έ 사이에 기물이 μžˆλŠ”μ§€ νƒμƒ‰ν•˜μ—¬ 기물이 μžˆλ‹€λ©΄ 0, μ—†λ‹€λ©΄ 탐색 λ°˜λ³΅λ¬Έμ„ νƒˆμΆœν•˜μ—¬ 1을 좜λ ₯ν•©λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•