๋ฌธ์
https://www.acmicpc.net/problem/17135
ํ์ด
์์ฒ 3๋ช ์ ์์น๋ฅผ 0~m-1์ฌ์ด์์ ์ ํด์ผ ํจ -> ์กฐํฉ-๊ธฐ์ ์กฐ๊ฑด: cnt==3(์์ฒ 3๋ช ์ ์์น๊ฐ ์ ํด์ก์๋)
enemy์ ๊ฒฝ์ฐ, ๋ณ๊ฒฝ๋๋ฉด ์๋๋ ์ ๋ณด์ด๋ฏ๋ก tmp_enemy๋ฅผ local ๋ณ์๋ก ๋ง๋ค์ด ๊ธฐ์กด ๋ฐ์ดํฐ ๋ณดํธ
tmp_enemy๊ฐ ๋น์ด์์ ๋๊น์ง(์ ์ด ๋ชจ๋ ์์ด์ง๋๊น์ง) while๋ฌธ์ ๋์, ์ ์ ์ฃฝ์ธ ํ์๋ฅผ ๊ตฌํ๋ค.
์ด๋ ์ ๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ ์ ํจ๊ฐ์ด๋ผ๋ฉด min๊ฐ(๊ฑฐ๋ฆฌ ์ต์๊ฐ)์ ๋ฐ๊ฟ์ฃผ๊ณ ์ฃฝ์ผ ์ ์ ์์น๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋๊ฒ์ด ์ผ๋ฐ์ ์ด์ง๋ง,
์ด ๋ฌธ์ ์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ์ฅ ์ผ์ชฝ์ ์ ์ ๊ณต๊ฒฉํด์ผํ๊ธฐ ๋๋ฌธ์ ํ์ฌ j๊ฐ์ด ๊ธฐ์กด์ ์ฃฝ์ผ ์ ์ ์์น์ j๊ฐ๋ณด๋ค ํด๋๋ ๋ฌด์.
๋ํ, ๊ฐ์ ์ ์ ๊ณต๊ฒฉํ ์ ์์ผ๋ฏ๋ก ์ ์ ๋ฐ๋ก ์ฃฝ์ผ ์๋(๋ฆฌ์คํธ์์ ์ญ์ ํ ์๋) ์์ผ๋ฏ๋ก ๋ชจ์๋์๋ค๊ฐ ํ๋ฒ์ remove๋ฅผ ํด์ค.
๊ณต๊ฒฉ์ด ๋๋๋ฉด ์ ์ ์์น๋ฅผ ์กฐ์ ํด์ผ ํ๋ฏ๋ก ๋ฆฌ์คํธ๋ฅผ ๋ค์์๋ถํฐ ์ํํ๋ฉฐ ๋งต๋ฐ์ผ๋ก ๋๊ฐ ์ ์ญ์ , ๋งต ์์ ์ ์ด๋ ์ํด.
while๋ฌธ์ ๋์ค๊ฒ ๋๋ฉด, ์ด์ ์ ์กฐํฉ๋ค ์ค ์ต๋ kill๊ฐ๊ณผ ํ์ฌ kill๊ฐ์ ๋น๊ตํ์ฌ max_kill๊ฐ ์ค์
์ฝ๋
import java.util.*;
import java.io.*;
public class Main{
static int n,m,d;
static List<int[]> enemy;
static int[] archer;
static int max_kill;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
d = Integer.parseInt(st.nextToken());
enemy = new ArrayList<int[]>();
archer = new int[3];
max_kill = 0;
for(int i =0 ; i < n ; i++) {
st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < m ; j++) {
if(Integer.parseInt(st.nextToken()) == 1) {
enemy.add(new int[] {i,j});
}
}
}
attack(0,0);
System.out.println(max_kill);
}
public static void attack(int cnt, int start) {
if(cnt == 3) { //๊ธฐ์ ์กฐ๊ฑด: ์์ฒ 3๋ช
์ ์์น๊ฐ ์ ํด์ก์ ๊ฒฝ์ฐ
int tmp_max_kill = 0;
List<int[]> tmp_enemy = new ArrayList<int[]>(); //enemy๋ฅผ ๊ณ์ ๋ณ๊ฒฝ์์ผ์ค์ผํ๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด์ enemy์ ์ง ํด์ผํจ
for(int i =0 ; i < enemy.size() ; i++) tmp_enemy.add(new int[] {enemy.get(i)[0], enemy.get(i)[1]}); //์ด๊ธฐ์ํ์ enemy๋ณต์ฌ
while(!tmp_enemy.isEmpty()) { //๋งต์ ์ ๋ค์ด ์์๋๊น์ง
int[][] killed = new int[3][2]; //๊ถ์๊ฐ ์ฃฝ์ธ ์ ์์น ์ ์ฅํ๋ ๋ณ์
for(int i =0 ; i < 3 ; i++) { //๊ถ์๋ง๋ค ์ฃฝ์ผ ์ ์ ํ
int min = Integer.MAX_VALUE;
for(int j =0 ; j < tmp_enemy.size() ; j++) { //์ ์์น๋ง๋ค ์ ์ฅ
int dis = Math.abs(tmp_enemy.get(j)[0] - n) + Math.abs(tmp_enemy.get(j)[1] - archer[i]); //์ ๊ณผ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
if(dis<=d && min >= dis ) { //์ ๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ ์ ํจ๊ฐ์ผ ๋
if(min == dis && killed[i][1] < tmp_enemy.get(j)[1] ) continue; //์์น๊ฐ ๊ฐ์ ์, ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ ์ kill
min = dis;
killed[i] = tmp_enemy.get(j);
}
}
}
for(int i =0 ; i < 3 ; i++) { //๊ฐ์ ์ ์ ์ฃฝ์ผ ์ ์๊ธฐ ๋๋ฌธ์, ํ๋ฒ์ ์ฒ๋ฆฌํด ์ฃผ์ด์ผ ํจ
if(tmp_enemy.contains(killed[i])) { //์์ ๊ถ์๊ฐ ์ด๋ฏธ ์ฃฝ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ์ ์ด ์๋์ง ์ฒดํฌ
tmp_enemy.remove(killed[i]); //์ฃฝ์ธ ์ ์ ๋ฆฌ์คํธ์์ ์ญ์
tmp_max_kill++; //์ฃฝ์ธ ํ์ ์ฆ๊ฐ
}
}
for(int i =tmp_enemy.size()-1 ; i >=0 ; i--) { //๋ฆฌ์คํธ์ด๊ธฐ ๋๋ฌธ์ ๋ค์์ ๋ถํฐ ์ญ์
if(tmp_enemy.get(i)[0] < n-1) //๋งต ๋ฐ์ผ๋ก ๋๊ฐ์ง ์์๋ ์๋๋ก ํ์นธ ์ด๋
tmp_enemy.get(i)[0] ++;
else
tmp_enemy.remove(i); //๋งต ๋ฐ์ผ๋ก ๋๊ฐ๋๊ฒฝ์ฐ ๋ฆฌ์คํธ์์ ์ญ์
}
}
max_kill = Math.max(max_kill, tmp_max_kill); //์ง๊ธ๊น์ง ์กฐํฉ์ค, ๊ฐ์ฅ ๋ง์ด ์ฃฝ์๋ ๊ฐ ์ ํ
return;
}
for(int i = start; i < m ; i++) {
archer[cnt] = i; //์์ฒ์ ์์น
attack(cnt+1, i+1);
}
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BruteForce' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 4012๋ฒ ์๋ฆฌ์ฌ, [๋ฐฑ์ค] 14889๋ฒ ์คํํธ์ ๋งํฌ (0) | 2021.08.18 |
---|---|
[๋ฐฑ์ค] 2961๋ฒ ๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์ (0) | 2021.08.17 |
[๋ฐฑ์ค]17281๋ฒ โพ(์ผ๊ตฌ) (0) | 2021.08.17 |
[SWEA] 6808๋ฒ ๊ท์์ด์ ์ธ์์ด์ ์นด๋๊ฒ์(java) (0) | 2021.08.13 |
[๋ฐฑ์ค] 15686๋ฒ ์นํจ๋ฐฐ๋ฌ ( java) (0) | 2021.08.13 |