본문 바로가기

알고리즘3

[알고리즘]다익스트라 알고리즘 다익스트라 알고리즘은 최단 경로를 알기위한 알고리즘입니다. 즉 특정한 하나의 정점에서 다른 모든 정점으로 가는 최단 경로를 알려줍니다. 그러나 해당 알고리즘은 음의 간선을 포함할 수 없으므로 이를 유의해야 합니다. 또한 이를 구현하는 방법에 힙 자료구조를 이용하는 방법이 있어, 자바를 이용해 구현하는 본 게시글에서는 PriortyQueue 클래스를 활용하여 구현하는 코드를 포함합니다. 다음은 예제입니다. 다익스트라의 진행 순서는 다음과 같습니다. 1. 시작점을 선택 2. 이동이 가능한 노드 중 가장 거리가 짧은 노드를 선택 3. 현재 구해진 각 노드까지의 거리와 선택된 노드를 거쳐 각 노드를 방문하는 거리를 비교 -> 선택된 노드를 거쳐 해당 노드를 방문하는 거리가 더 짧은 경우 거리를 갱신 4. 2번과.. 2021. 4. 13.
백준 7562 나이트의 이동 www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 백준 7562번 나이트의 이동 가볍게 BFS를 통해 해결할 수 있는 문제입니다! 기존의 BFS 문제를 해결할때 사용하던 Delta X, Delta Y 배열에 상하 좌우가 아닌 나이트의 이동이 가능한 방향인 8방향을 넣고 BFS를 진행하니 간단하게 시작점에서 도착점까지의 최소 구간을 구해낼 수 있었습니다. 아래는 코드입니다! import java.io.BufferedReader; import java.io.IOEx.. 2021. 2. 9.
알고리즘 문제를 푸는 마음가짐 1. 문제를 풀기전에 고민하는 시간, 구현하는 시간, 테스트 하는 시간을 1:1:1 비율로 한다. (되도록이면 고민하는 시간을 길게) 2. 고민하는 부분은 많지만 간략하게 다음과 같다. ① 어떠한 자료구조를 쓸지 (배열, 연결리스트, 어레이리스트) / (스택, 큐, 힙, 세그먼트 트리) ② 어떤 구조로 짤지 메소드의 위치, 틀 그리고 재귀로 구현할지 반복문으로 구현할지 속도 : 재귀 < 반복문 재귀는 자신이 할 일만하고 슥 넘기는 것이기 때문에 구현의 스케일이 큰 경우에 논리를 헷갈리지 않고 구현할 수 있다. ③ 어떠한 기술로 구현해야 할지 브루트포스, DFS, BFS, 백트래킹, 시뮬레이션, DP, 그리디 ④ 이렇게 구현하였을때 시간 복잡도가 어떻게 나오는지 10,000 * 10,000 = 100,00.. 2021. 2. 9.