Programmers - 블록 이동하기 with JAVA
로직 이 문제는 너무 복잡했다. 따라서 차분히 설계 후 코드를 작성하는 것이 훨씬 도움이 많이 됨을 느꼈다. 기본적으로 우선순위 큐와 방문처리 배열을 활용해 로직을 처리한다. - 우선 순위 큐에은 비용, (x1, y1), (x2, y2), 방향을 담는다. - 방문처리는 가로, 세로 둘 다 (x2, y2)를 기준으로 방문처리를 한다. - 항상 가로는 왼쪽, 세로는 위쪽이 (x1, y1)이 되도록 고정 처리한다. - 방향마다 모든 이동 경로에 대한 로직을 작성한다. 코드 import java.util.*; class Solution { public int solution(int[][] board) { int n = board.length; int m = board[0].length; // 비용, x1, y1..
Programmers - 양과 늑대 with JAVA
로직 - DFS 위와 같은 상황이 있다고 가정하자. dfs의 시작은 노드번호 0부터 시작한다. 1 : 0번 방문) next = {1, 8}, 양 = 1, 늑대 = 0 2 : 0-1번 방문) next = {8, 2, 4}, 양 = 2, 늑대 = 0 3 : 0-8번 방문) next = {1, 7, 9}, 양 = 1, 늑대 = 1 -> 하지만 양과 늑대 수가 같아지므로 제외됨. 4 : 0-1-8번 방문) next = {2, 4, 7, 9} 양 = 2, 늑대 = 1 ... 즉, 방문마다 다음 방문할 노드로 해당 노드의 자식 노드들은 추가하되, 형제 노드도 추가해주면서 DFS를 돌리는 방식으로 이 문제를 해결할 수 있다. 코드 import java.util.*; class Solution { public stat..