A-star 알고리즘
·
알고리즘 정리
A-star 알고리즘이란?A* 알고리즘은 최단 경로 탐색 알고리즘으로, 다익스트라(Dijkstra)의 장점과 휴리스틱(Heuristic)을 결합한 방식이다.다익스트라: 실제로 이동한 비용(g(n))을 최소화A-star: g(n) + 미래에 걸릴 비용 추정(h(n)) = f(n)을 최소화즉, $f(n)=g(n)+h(n)$ 다음과 같은 식을 가지게 된다.g(n): 시작점에서 현재까지 온 실제 비용h(n): 현재 위치에서 목표까지의 추정 비용 (휴리스틱)A-star 알고리즘을 사용하는 이유다익스트라는 모든 방향을 탐색하기 때문에 비효율적일 수 도 있다.A-star 는 목표 지향적으로 움직여 불필요한 탐색을 줄이고, 빠르게 경로를 찾아냅니다.휴리스틱 함수란?A*의 핵심은 h(n) 을 어떻게 정의하느냐에 달라진다..
다익스트라 알고리즘 (Dijkstra’s Algorithm) 개념 정리
·
알고리즘 정리
1. 다익스트라 알고리즘이란?최단 경로(Shortest Path) 알고리즘 중 하나.특정 시작 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘이다.음수 가중치가 없을 때만 사용 가능.2. 원리 (Greedy + Priority Queue)매번 가장 가까운 정점을 선택해 확정(visited)한다.해당 정점을 거쳐 다른 정점으로 가는 경로를 최단 거리로 갱신한다.이를 반복하면서 모든 정점의 최단 거리를 구한다.핵심 아이디어:"가장 가까운 정점부터 처리하면, 그 이후에는 더 짧은 경로가 나올 수 없다."3. 알고리즘 과정시작 정점의 거리를 0으로, 나머지는 ∞(무한대)로 초기화.방문하지 않은 정점 중 가장 거리가 짧은 정점을 선택.선택한 정점을 거쳐 갈 수 있는 이웃 정점들의 거리를 갱신.모든 정점..
[BOJ][P5] 6549 히스토그램에서 가장 큰 직사각형
·
알고리즘 문제풀이
문제 내용입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤ 1,000,000,000)가 주어진다. 이 숫자들은 히스토그램에 있는 직사각형의 높이이며, 왼쪽부터 오른쪽까지 순서대로 주어진다. 모든 직사각형의 너비는 1이고, 입력의 마지막 줄에는 0 6이 하나가 주어진다히스토그램 내에서 만들 수 있는 가장 큰 직사각형의 넓이를 구하는 문제다.문제 접근 (의식의 흐름대로)딱 문제를 보고 들었던 생각들을 정리하면 다음과 같다.일단 n이 10만이고, 직사각형 높이가 10억이니까 이걸 전부 반복시키면 안되겠다시간 복잡도를 무조건 생각해야..
[BOJ][G5] 2504 괄호의값
·
알고리즘 문제풀이
문제 내용‘()’ 인 괄호열의 값은 2이다.‘[]’ 인 괄호열의 값은 3이다.‘(X)’ 의 괄호값은 2×값(X) 으로 계산된다.‘[X]’ 의 괄호값은 3×값(X) 으로 계산된다.‘(()[[]])([])’ 의 괄호값을 구해보자. ‘()[[]]’ 의 괄호값이 2 + 3×3=11 이므로 ‘(()[[]])’의 괄호값은 2×11=22 이다. 그리고 ‘([])’의 값은 2×3=6 이므로 전체 괄호열의 값은 22 + 6 = 28 이다.문자열(스트링)이 주어진다. 단 그 길이는 1 이상, 30 이하문제 접근올바르지 못한 괄호열이면 반드시 0을 출력 이런경우 ‘+’ 로 계산 ‘[()]’ 경우 * 로 계산.(()[[]])([]) 를 처리하는 방법에 대해 생각해보자1. → 우선 올바른 괄호열인지 여부를 파악2. → valu..
[BOJ][S3] 17413_단어뒤집기2
·
알고리즘 문제풀이
알고리즘 BOJ_17413_단어뒤집기2_S3문제 내용문자열 S이 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' ``'), 특수 문자('', '>')로만 이루어져 있다''와 '>'가 문자열에 있는 경우 번갈아가면서 등장'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, ''와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분무문제 접근문자열 S 에서 단어를 뽑아낸다. 뽑아내는 기준은 우선위로 로 구분을 하고 안 공백(' ')은 바뀌지 않고 외부의 공백(' ') 은 바뀌게 된다.일단 List 형태로 저장한다. 그리고 태그안에 들어가는 건지 아니면 그냥 문자열인지 구분하는 Lis..
0-1 knapsack 문제정리
·
알고리즘 정리
0-1 knapsack 문제란 배낭에 담을 수 있는 무게에 서로 무게가 다른 값어치의 물건을 담는다고 할 때 가방에 담을 수 있는 최대 값를 계산하는 방법이다.knapsack 문제는 Fractional knapsack 과 0-1 knapsack 두개 가 있는데Fractional knapsack은 쪼개서 일부 선택 가능한 knapsack 문제이고0-1 knapsack : 아이템을 0개 또는 1개만 선택할 수 있는 경우이다.0-1 knapsack 관련 문제를 푸는 이유이 중에서 DP에 대한 개념을 더 잘 이해하기 위해 0-1 knapsack을 고르게 되었다.0-1 knapsack을 그리디로 풀어서는 안되는 이유가방의 무게가 50일때 물건들이 다음과 같은경value : 60 , 100 , 120weight :..