๐ ๋งํฌ
https://www.acmicpc.net/problem/20208
๐คฏ ํ์ค ํ๊ธฐ
์คํ๋ฒ ์ค ๋ฏผํธ์ด์ฝ ํ๋ผํธ์น๋ ธ ๊ฐ๋ง์์!
๐คท ๋ฌธ์
๐ฉ๐ป ํ์ด
์ง์ฐ์ ์ฒด๋ ฅ๊ณผ ํ์ฌ ๋ง์ ๋ฏผํธ์ด์ฝ์ ๊ฐ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ง๊ณ ์ฌ๊ท๋ฅผ ๋๋ฉด๋๋ค.
์ด๋ ์ฌ๋ฐ๋ ๊ฒ์ ์ง์์ ๋ถํฐ ์ํ์ข์ฐ๋ก ์ด๋ํ ํ์ ์์ด ๋ฏผํธ ์ด์ฝ ์์น๋ง ์ ์ฅํด๋๊ณ ์์์ผ๋ก ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ค.
์ง (x, y) ์ ๋ฏผํธ์ด์ฝ (a, b) ์ ๊ฑฐ๋ฆฌ distance = | x - a | + | y - b | ์ด๋ค. ๋ฐ๋ผ์ ๋ฏผํธ ์ด์ฝ ์์น๋ ์ง์ ์์น๋ง ์ ์ฅํด๋๊ณ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด์ ์ฒด๋ ฅ์ ๊ณ์ฐํด์ค๋ค. ๋ค์ ๋ฏผํธ ์ด์ฝ ์์น์์์ ์ฒด๋ ฅ์ ( ํ์ฌ ์ฒด๋ ฅ + H - ๊ฑฐ๋ฆฌ ) ์ด๋ค.
๋ฐฑํธ๋ํน ๋ฌธ์ ๋ก ์ข ๋ฃ ์กฐ๊ฑด์ ์ฒด๋ ฅ์ด 0๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ง ๊ฒฝ์ฐ, ๋ชจ๋ ๋ฏผํธ ์ด์ฝ๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ์ด๋ค.
์ฌ๊ท๋ฅผ ๋ ๋๋ง๋ค ๋ฏผํธ์ด์ฝ ๊ฐ์๊ฐ ํ์ฌ ์ต๋๊ฐ๋ณด๋ค ์ปค์ง๋ค๋ฉด ๋ณ๊ฒฝํด์ค๋ค.
๐ป ์ฝ๋
//AC
//BOJ 20208 ์ง์ฐ์ ๋ฏผํธ์ด์ฝ ์ฐ์
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <string>
using namespace std;
int N, H, ans, homex, homey;
struct Mint {
int x;
int y;
int check;
};
vector<Mint> v;
void solve(int x, int y, int M, int cnt) {
if (cnt > ans) {
if(abs(x - homex) + abs(y - homey) <= M) ans = cnt;
}
if (M <= 0 || cnt == v.size()) return;
for (Mint& mint : v) {
int dist = abs(mint.x - x) + abs(mint.y - y);
if (dist <= M && !mint.check) {
mint.check = 1;
solve(mint.x, mint.y, M + H - dist, cnt + 1);
mint.check = 0;
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int M, temp;
cin >> N >> M >> H;
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
cin >> temp;
if(temp == 1) {
homex = i; homey = j;
}
else if(temp == 2) {
v.push_back({i, j, 0});
}
}
}
solve(homex, homey, M, 0);
cout << ans;
return 0;
}
'DEV > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/11968] High Card Wins, c++ (0) | 2021.12.22 |
---|---|
[BOJ/14746] Closest Pair, c++ (0) | 2021.09.20 |
[BOJ/20218] Parity Constraint Shortest Path, c++ (1) | 2021.08.28 |
[BOJ/20666] ์ธ๋ฌผ์ด์ ์ ์, c++ (2) | 2021.08.20 |
[BOJ/20665] ๋ ์์ค ๊ฑฐ๋ฆฌ๋๊ธฐ, c++ (2) | 2021.08.20 |