알고리즘 공부/백준

[백준] No.17135 - 캐슬 디펜스 (C++)

EVEerNew 2020. 10. 25. 16:57
반응형

문제

www.acmicpc.net/problem/17135

 

17135번: 캐슬 디펜스

첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다.

www.acmicpc.net

 

풀이

 궁수를 배치하는 경우의 수를 모두 탐색하여 해당 배치에서 최대 몇 명의 적을 죽일 수 있는지 확인하여 최댓값을 구하면 되는 부르트 포스 문제이다.

 거리가 같다면 왼쪽의 적부터 공격하는 것과 궁수들이 동일한 적을 공격할 수 있다는 것을 주의 하며 구현하자.

 

ArrayArcher(): 3명의 궁수를 배열하는 모든 경우의 수를 탐색. isArcherPosition[]에 해당 궁수가 배치되면 true 값을 저장하여, 배열이 끝나면 StartAttack()을 호출.

 

StartAttack(): 궁수가 있는 위치로부터 왼쪽에서 가장 가까운 적을 찾아 aimEnemyPos[3][2] 저장한다. 만약 궁수의 공격 범위보다 탐색하는 칸의 거리가(nowDistance) 더 멀거나, 현재의 가장 가까운 적의 거리 minDist보다 nowDistance가 크다면 더 이상 탐색할 필요가 없으므로 break 한다.

 이후에 적들이 한 칸씩 내려가도록 MoveEnemy()를 호출하고 자신을 turn을 +1 한 후 재귀 호출해준다.

 

구현이 약간 까다로워 실수가 많이 일어났다. 예제가 많이 주어지지 않았다면 왜 틀렸는지도 몰랐을 것 같다.

 

코드

 

 

 

반응형