๋ฌธ์
์ฝ๋
#include <iostream>
#include <vector>
#include <memory.h>
using namespace std;
int N, M, D, ans = -1, ans_temp;
int map_temp[16][16], map[16][16];
void attack_enemy(vector<pair<int,int>> enemy){
for(auto it: enemy){
if(it.first != 1e9 && it.second != 1e9){
if(map_temp[it.first][it.second] == 1){
map_temp[it.first][it.second] = 0; // ์ ์ ์ฃฝ์์ผ๋ ๋น์นธ์ผ๋ก ๋ง๋ค์ด์ค๋ค.
ans_temp++; // ์ฃฝ์ธ ํ์ ์ฆ๊ฐ
}
}
}
}
void move_enemy(){ // ์ ์ด๋
vector<pair<int,int>> enemy_location;
for(int i=0; i<N; i++){
for(int k=0; k<M; k++){
if(map_temp[i][k] == 1){
int nr = i+1;
int nc = k;
if(nr<N) enemy_location.push_back({nr, nc}); // ์๋๋ก ์ด๋ํ์ ๋ ์ฑ์ด ์๋ ์นธ์ด ์๋๋ฉด ์ด๋ํ ์์น ๊ธฐ์ต
map_temp[i][k] = 0;
}
}
}
for(auto it: enemy_location) map_temp[it.first][it.second] = 1; // ์ ์ด๋
}
bool isenemy(){ //์ ์ด ์กด์ฌํ๋์ง ํ์ธ
for(int i=0; i<N; i++){
for(int k=0; k<M; k++){
if(map_temp[i][k] == 1) return true; // ์ ์ด ์กด์ฌํ๋ค๋ฉด
}
}
return false; // ์ ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด
}
vector<pair<int,int>> find_enemy(int archer1, int archer2, int archer3){ // ์ ์์น ํ์
int min_d1 = 1e9, min_d2 = 1e9, min_d3 = 1e9;
int enemy_r1 = 1e9, enemy_c1 = 1e9, enemy_r2 = 1e9, enemy_c2 = 1e9, enemy_r3 = 1e9, enemy_c3 = 1e9;
for(int i=0; i<N; i++){ // ๊ฐ ๊ถ์๋ง๋ค ๊ฐ๊น์ด ์ ํ์
for(int k=0; k<M; k++){
if(map_temp[i][k] == 1){ // ๋น์นธ์ด ์๋๋ผ ์ ์ผ ๊ฒฝ์ฐ
int d1 = abs(N - i) + abs(archer1 - k);
int d2 = abs(N - i) + abs(archer2 - k);
int d3 = abs(N - i) + abs(archer3 - k);
if(d1 <= min_d1 && d1 <= D){ // ๊ถ์1์ด ์ฃฝ์ผ ์ ์ ์ขํ
if(d1 == min_d1){
if(enemy_c1>k){
min_d1 = d1;
enemy_r1 = i;
enemy_c1 = k;
}
}
else{
min_d1 = d1;
enemy_r1 = i;
enemy_c1 = k;
}
}
if(d2 <= min_d2 && d2 <= D){ // ๊ถ์2๊ฐ ์ฃฝ์ผ ์ ์ ์ขํ
if(d2 == min_d2){
if(enemy_c2>k){
min_d2 = d2;
enemy_r2 = i;
enemy_c2 = k;
}
}
else{
min_d2 = d2;
enemy_r2 = i;
enemy_c2 = k;
}
}
if(d3 <= min_d3 && d3 <= D){ // ๊ถ์3์ด ์ฃฝ์ผ ์ ์ ์ขํ
if(d3 == min_d3){
if(enemy_c3>k){
min_d3 = d3;
enemy_r3 = i;
enemy_c3 = k;
}
}
else{
min_d3 = d3;
enemy_r3 = i;
enemy_c3 = k;
}
}
}
}
}
return {{enemy_r1, enemy_c1}, {enemy_r2, enemy_c2}, {enemy_r3, enemy_c3}}; // ๊ฐ๊ฐ ๊ถ์๊ฐ ์ด์ผํ ์ ์ขํ
}
void simulation(int archer1, int archer2, int archer3){
memcpy(map_temp, map, sizeof(map));
while(isenemy()){
attack_enemy(find_enemy(archer1, archer2, archer3));
move_enemy();
}
ans = max(ans, ans_temp);
ans_temp = 0;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M>>D;
// ๋งต ์
๋ ฅ
for(int i=0; i<N; i++){
for(int k=0; k<M; k++){
cin>>map[i][k];
}
}
// ๊ถ์ ์ธ๋ช
์์น ๊ณ ๋ฅด๊ธฐ
for(int a = 0; a < M; a++){
for(int b = a+1; b < M; b++){
for(int c = b+1; c < M; c++){
simulation(a, b, c);
}
}
}
cout<<ans;
}
ํ์ด
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 |
๊ถ์ | ๊ถ์ | ๊ถ์ |
์์ ๊ฐ์ด N, M ํฌ๊ธฐ์ ๊ณต๊ฐ์ 1์ด๋ผ๊ณ ์ ํ ๊ณณ์ ์ ์ ์๋ฏธํ๋ฉฐ, N+1ํ์ ์ฑ์ด ์๋ ๊ณณ์ผ๋ก ์ฑ์๋ ์ต๋ ์ธ๋ช ์ ๊ถ์๊ฐ ๊ฐ๊ฐ์ ์ฑ์ ์์นํ๊ณ ์์ต๋๋ค.
- ๊ฐ๊ฐ์ ํด๋ง๋ค ๊ถ์๋ ์ ํ๋๋ฅผ ๊ณต๊ฒฉํ ์ ์๊ณ , ๋ชจ๋ ๊ถ์๋ ๋์์ ๊ณต๊ฒฉํ๋ค.
- ๊ถ์๊ฐ ๊ณต๊ฒฉํ๋ ์ ์ ๊ฑฐ๋ฆฌ๊ฐ D์ดํ์ธ ์ ์ค์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ด๊ณ , ๊ทธ๋ฌํ ์ ์ด ์ฌ๋ฟ์ผ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ ์ ๊ณต๊ฒฉํ๋ค.
- ๊ฐ์ ์ ์ด ์ฌ๋ฌ ๊ถ์์๊ฒ ๊ณต๊ฒฉ๋นํ ์ ์๋ค. ๊ณต๊ฒฉ๋ฐ์ ์ ์ ๊ฒ์์์ ์ ์ธ๋๋ค.
- ๊ถ์์ ๊ณต๊ฒฉ์ด ๋๋๋ฉด, ์ ์ด ์ด๋ํ๋ค. ์ ์ ์๋๋ก ํ ์นธ ์ด๋ํ๋ฉฐ, ์ฑ์ด ์๋ ์นธ์ผ๋ก ์ด๋ํ ๊ฒฝ์ฐ์๋ ๊ฒ์์์ ์ ์ธ๋๋ค.
- ๋ชจ๋ ์ ์ด ๊ฒฉ์ํ์์ ์ ์ธ๋๋ฉด ๊ฒ์์ด ๋๋๋ค.
๊ฐ ์กฐ๊ฑด์ ๋ง๊ฒ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํํด ๋๊ฐ๋ฉด ๋๋ ๋ฌธ์ ์ ๋๋ค. ์๋ฎฌ๋ ์ด์ ๋ฌธ์ ๊ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ธด ํด๋ ์ ์ผ ์ฌ๋ฐ๋ ๊ฒ ๊ฐ์ต๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 16236๋ฒ - ์๊ธฐ ์์ด (0) | 2022.08.28 |
---|---|
[๋ฐฑ์ค,c++] 15686๋ฒ - ์นํจ ๋ฐฐ๋ฌ (0) | 2022.08.26 |
[๋ฐฑ์ค,c++] 16234๋ฒ - ์ธ๊ตฌ ์ด๋ (0) | 2022.08.25 |
[๋ฐฑ์ค,c++] 14503๋ฒ - ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2022.08.24 |
[๋ฐฑ์ค,c++] 20955๋ฒ - ๋ฏผ์์ ์๊ธ ์์ (0) | 2022.08.23 |
[๋ฐฑ์ค,c++] 18429๋ฒ - ๊ทผ์์ค (0) | 2022.08.23 |
๋๊ธ