Algorithm(73)
-
BOJ G4 1504 특정한 최단 경로 JAVA
1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net 문제 읽기 방향성이 없는 그래프가 주어진다. 양방향이어도 다익스트라를 사용하는 데에는 전혀 문제가 없고, 단지 처음에 그래프를 인접 리스트로 입력 받을 때, 양 쪽에 다 넣어주면 된다. 일단 이 문제에서는 주어지는 두 노드를 반드시 방문하면서 1 → N까지의 최소 거리를 구해야 한다. 즉, 주어지는 두 노드를 mid1, mid2라고 한다면, 1 → mid1 → mid2 → N 또는 1 → mid2 → mid1 → N ..
2024.01.21 -
BOJ G3 1238 파티 JAVA
1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 문제 읽기 처음 문제를 봤을 때.. 다익스트라 같은데, 다익스트라를 너무 많이 돌리는데? 싶었다. N명의 학생이, 각각 N개의 마을을 출발점으로 X까지 최소 거리 구하려면 다익스트라 N번, 게다가 X를 출발점으로 다른 N개의 마을까지 최소 거리 구하려면 다익스트라 1번.. 총 N+1번의 다익스트라인데? 싶었다. 그래도 N이 1000이라서 일단 괜찮을 것 같아서 (조금 찜찜하지만) N+1번의 다익스트라로 문제를 풀었다. 문제 풀기 딱..
2024.01.20 -
BOJ G5 1916 최소비용구하기 JAVA
1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net 문제 읽기 어제 공부했던 다익스트라 문제이다. 연습 삼에 몇 문제 정도 더 풀어보려고 한다. 다익스트라 개념과 동작 과정을 이해하고 싶으면 다음 포스팅을 참고하면 좋다! 다익스트라, Dijkstra Algorithm 코딩 문제에서 많이 볼 수 있는 그래프와 관련된 알고리즘을 공부해보자. 그래프에서 최단 거리를 구하는 알고리즘은 다음과 같은 것들이 있다. 💡 그래프의 최단 거리 구하는 알고리즘 1. 다익 rue-mi.tistory..
2024.01.20 -
다익스트라, Dijkstra Algorithm
코딩 문제에서 많이 볼 수 있는 그래프와 관련된 알고리즘을 공부해보자. 그래프에서 최단 거리를 구하는 알고리즘은 다음과 같은 것들이 있다. 💡 그래프의 최단 거리 구하는 알고리즘 1. 다익스트라, Dijkstra 2. 벨만-포드, Bellman-Ford 3. 플로이드-와샬, Floyd-Wrasahll 그 중에서 가장 많이 쓰이는 다익스트라에 대해 먼저 알아보자! 다익스트라 알고리즘, Dijkstra Algorithm 💡 다익스트라, Dijkstra 그래프의 최단 경로를 구하는 알고리즘 중 하나로, 하나의 정점에서 다른 모든 노드까지의 최단 거리를 구할 수 있는 알고리즘이다. 단, 음수 가중치는 없어야 한다. (음수 가중치가 있다면 벨만 포드 사용) [시간복잡도] V : 노드의 숫자, E : 간선의 숫자 ..
2024.01.20 -
BOJ G2 2749 피보나치수3 JAVA
2749번: 피보나치 수 3 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제 읽기 일단 피보나치를 푸는 내가 아는 가장 간단한 방법.. DP.. 그거 말고는 생각이 나지 않았는데, 문제에서 주어지는 N의 크기는 엄청났다. 무려 10의 18승..!! 저번에 풀었던 power의 분할 정복 처럼 로그를 씌우지 않고는 불가능한 거 아닌가? 생각이 들면서 전혀 감이 잡히지 않았고, DP로 코드를 한 번 짜봤지만 당연하게도 N의 최대 범위를 넣으니 응답이 없었다.. 그래서 질문 게시판을 참고했다. 피보나치 수를 구하는 여러가지 방법 피보나치 수는 다음과 같이 정의되는 수열입니다. $F_0 = 0$ $F_1 = 1$ $F_n..
2024.01.18 -
BOJ G1 2933 미네랄 JAVA
2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄 www.acmicpc.net 문제 읽기 이 문제는 처음 읽었을 때 시뮬레이션 문제인 것 같았다. R, C, N의 값도 그리 크지 않고 시뮬레이션을 했을 때 말고는.. 딱히 답을 구할 방법이 생각나진 않았다. 그래서 다음과 같이 초기 계획을 세웠다. 거의 이 계획대로 코드를 작성했다. (빨간색으로 N-1행이라 되어있는데 R-1행이다. 오타이다.) 문제 풀기 문제 풀이 과정을 다시 한 번 정리해보겠다. 우선 문제를 풀 때 특별한 알고리즘은 사용하지 않았고, BFS와 Queue, 그리고 작은 꼼수(?)가 필요..
2024.01.17