반응형

알고리즘/백준 35

백준 1854: K번째 최단경로 찾기

https://www.acmicpc.net/problem/1854문제에서 최단거리 + 시작 위치 고정 + 양수 비용이라는 점에서 다익스트라를 사용할 수 있다는 점을 알 수 있었다. 하지만 다익스트라는 "최단"거리를 구할 때 사용하기 때문에 약간의 변형이 필요한 문제였다.K번째 최단 경로를 구하기 위해서는 1번째 최단경로의 cost, 2번째 최단 경로의 cost...K-1번째 최단 경로의 cost를 알고 있어야한다. 하지만 K+1번째 cost부터는 필요가 없다. 또한 시작점에서 A라는 노드로 이동하는데 걸리는 newCost과 이미 알고있는 A까지 이동하는데 필요한 cost1, cost2,... ,costK가 있다고 하자. 이때 newCost과 유의미한 비교가 되는 것은 이미 알고 있는 값들(cost 1, ..

알고리즘/백준 2025.08.11

백준 11438: LCA2

https://www.acmicpc.net/problem/11438Lowest common ancestor 유형의 전형적인 문제이다. 가장 먼저 떠오르는 아이디어는 아마 두 노드의 높이를 같게하고 하나씩 올라가면서 같아지는 경우 노드를 출력하는 것일텐데 이렇게 구현하면 시간초과가 난다. 그래서 sparse table이라는 테크닉을 사용해야한다. 처음 풀이에서 하나씩 올라가면서 찾는 것이 아닌 2^K만큼씩 이동하면서 찾는 것이다.일단 모든 숫자는 이진수로 나타낼 수 있고 이를 2^K만큼씩 이동하면서 표현할 수 있다. 예를 들어 7은 0b1011이 될것이고 이는 2^2+2^1+2^0이 될것이다. 이것에 아이디어를 얻어 다음과 같은 p[k][i]라는 table을 만든다. 이 table의 의미는 i번 노드의 2..

알고리즘/백준 2025.08.11

백준 2243번: 사탕상자

https://www.acmicpc.net/problem/2243처음 보고 힙이나 정렬을 사용해야할 것같았지만 원소의 빈번한 추가/제거/업데이트 가 있어서 매번 적절한 위치를 찾고 다시 정렬하는게 쉽지 않아 보였다. 그래서 indexed tree를 사용했다.leaf에는 맛이 i인 사탕의 수를 저장하였다. 그 후 부모노드는 자식 노드의 합으로 저장하였다. 이렇게 하면 리프노드부터 시작하여 자식 노드를 보면서 n번째 사탕이 왼쪽 자식에 있는지 오른쪽 자식에 있는지 알 수 있고 최종적으로 적절한 위치에 있는 사탕을 꺼내 줄 수 있게 된다.#include #include #include #include #include #include #include #include #include using namespace ..

알고리즘/백준 2025.08.11
반응형