🧩 Problem Solving
[CodeTree] 루돌프의 반란
문제 링크
1. 아이디어
그냥 빡구현…
1. 소 돌진
1-1) 가장 가까운 사람 찾기 : 거리가 가장 가까우면서 r -> c 우선순위로 더 큰 사람
1-2) 그 사람과 가까워지는 방향 찾기(8방 탐색)
1-3) 그 방향으로 이동하기 : 만약 이동한 곳에 사람이 있다면 상호작용
2. 각 사람들 돌진
2-1) 기절했거나 이미 게임에서 탈락했다면 무시
2-2) 소에게 가까워지는 방향 찾기(4방 탐색, 상우하좌 우선순위) : 그 방향에 사람이 있다면 무시, 거리가 무조건 가까워져야함
2-3) 그 방향으로 이동하기 : 만약 이동한 곳에 소가 있다면 상호작용
3. 남아있는 사람들 점수 부여 : 보드 순회하면서 남아있는 노드에게 1점씩 부여
- 이동 시 주의 : 아래 세 과정이 모두 일어나야 함
- 원래 있던 자리 null
- node.r, node.c 갱신
- board 새로운 자리에 node 넣기
2. 자료구조
- Node class : 산타(사람), 루돌프(소) - r,c,n, isOut, downUntil, score, isCow
- Node[][] board
- List<Node> personList : n을 기준으로 오름차순 정렬 필요
- Node cow
이전 코드에서 놓친 부분
- 소 이동하기 위해 8방탐색할 때 최소 거리 갱신 안해줌 (minDistance = curDistance 를 안하고 넘어감)
- 사람 이동시킬 때 null 처리 + 사람의 r, c만 갱신하고, 보드 새로운 위치에 사람 놓는 거 안함(board[ny][nx] = person 안함)
- 사람 튕겨질 때 그 전 위치 null 안함
- time <= M 해야 하는데 time < M 했음(마지막 턴 안돌고 끝나버림)