프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

문제

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 한 후 재귀 호출해준다.

 

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

 

코드

 

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함