[프로그래머스 lv2] 게임 맵 최단거리 풀이
✅ 프로그래머스의 모든 문제와 해설 보기[클릭] 해설 map이 있을 때, (0, 0)에서 (n-1, m-1) 까지의 최단 거리를 구하는 문제이다. BFS를 이용하여 탐색가능한 좌표를 따라 이동하고 최단거리를 구해보자. 먼저, 큐에 출발 위치 (0,0)을 삽입하고, dist[0][0]을 0으로 초기화 한다. dist[i][j]는 (0, 0)에서 (i, j)까지의 최단거리를 기록하는 배열로, 좌표를 방문하지 않은 경우 -1로 초기화되어있다. 이후, 큐에서 좌표를 하나씩 꺼내면서 이동가능한 좌표를 확인하고 새로운 좌표를 큐에 넣는다. 이동가능한 좌표는 현재 좌표의 동서남북에 있는 좌표 중, (0, 0) ~ (n-1, m-1) 내에 있고, 아직 방문한 적이 없으며, maps[i][j] 값이 1인 좌표이다. 새로..
2022. 8. 17.
[프로그래머스 lv2] 땅따먹기 풀이
✅ 프로그래머스의 모든 문제와 해설 보기[클릭] 해설 가장 먼저 떠오르는 풀이는 모든 경우의 수에 대해 점수를 구하고, 이 중 최댓값을 리턴하는 방법이다. 그러나 해당 방법의 시간 복잡도를 계산해보면, 4^100000 정도로 시간 초과가 100% 발생한다. 완전탐색 풀이는 시간초과가 발생할 때, 한번쯤 dp(동적프로그래밍) 방법을 떠올려보면 좋다. dp[i][j]를 i번째 행, j번째 열에 도착할 떄까지의 최대 점수 라 정의하면, dp[i][j] = max(dp[i-1][k]) + land[i][j] (단, k는 0, 1, 2, 3 중 j가 아닌 수) 가 된다. max(dp[i-1][k])는 i-1 번째 행을 밟을 때까지 점수의 최댓값이다. 동일한 열은 두 번 연속 밟을 수 없다고 했으므로, i행, j열..
2022. 8. 16.