문제 링크: https://www.codetree.ai/frequent-problems/battle-ground/description
빡구현 문제. 하지만 기존 구현 기출보다는 쉽다고 느꼈다. "분명 시험 시간이 1시간 늘었는데도 왜 쉽게 낸 것 같지?"라고 생각하신 분들은 2번을 풀어보시길..........
문제에서 필요한 것들을 흐름에 따라 차근차근 생각해보자.
- 각 라운드마다,
- 싸움꾼 번호에 따라 하나씩 이동한다(이동했는데 격자 바깥이면 180도 돌아서 이동)
- 1. 이동한 위치에 다른 싸움꾼이 있다?
- 결투+점수 업데이트(함수 fight)
- a. 패자
- 무기를 버리고(함수 throw_weapon)
- 이동할 수 있는 곳 찾아 이동 후 가능하면 무기 교체(함수 loser_move)
- b. 승자
- 패자가 버린 무기까지 고려해서 무기 교체(함수 change_weapon)
- 2. 이동한 위치에 다른 싸움꾼이 없다?
- 가능하면 무기 교체(함수 change_weapon)
*고려해야 할 점
- 무기 교체 시 최선의 무기 선택 -> 위치에 따른 무기 정보가 담긴 field의 각 위치마다 heapq 사용
- 파이썬 기준 max heap 사용 위해 음수로 저장, 점수 계산이나 무기 비교할 때 까먹으면 안 됨
- 싸움꾼 위치정보 및 격자 탐색 -> 이를 위한 war_field matrix 사용
- 어차피 무기를 교체한다는 건, 무조건 그 위치에 정착한다는 이야기(1-a, 1-b, 2 세가지 케이스 모두)
- change_weapon 내에 해당 행동을 하는 싸움꾼의 위치를 war_field에 업데이트 하는 코드 추가
- 동일한 타이밍에 3명 이상의 싸움꾼이 같은 위치에 있는 경우는 "절대" 불가능함 - 왜 그런지 차근차근 생각해보시길
- war_field는 3차원 리스트까지 갈 필요 없음
- 점수 업데이트 하는 부분은 승자 정하는 함수 fight에 추가
이 정도 고려해서 문제를 풀면 된다.
'알고리즘 문제풀이 > 코드트리(삼성 기출)' 카테고리의 다른 글
색깔 폭탄(2021 상반기 오전 2번, 백준 21609 상어 중학교) (0) | 2022.10.14 |
---|---|
정육면체 한번 더 굴리기(2021 하반기 오전 1번, 백준 23288 주사위 굴리기 2) (0) | 2022.10.11 |
술래잡기(2022 상반기 오전 1번) (0) | 2022.10.11 |
바이러스 검사(2015 하반기 1번, 백준 13458 시험 감독) (0) | 2022.10.09 |
외주 수익 최대화하기(2017 상반기 오전 2번, 백준 14501 퇴사) (0) | 2022.10.09 |