본문 바로가기

백준

(23)
[최단경로찾기] - 다익스트라 알고리즘 다익스트라 알고리즘은 그리디 알고리즘의 성격을 띄는 '최단경로 찾기' 알고리즘이다.'각 노드에 대한 현재까지의 최단거리'를 저장하며  매번 현재 처리하고 있는 노드를 기준으로 주변 간선을 확인해 가장 짧은 경로로 업데이트 하는 방식으로 동작하기 때문이다. 최단경로를 찾는 알고리즘에는 다익스트라 외에도 벨만 포드 알고리즘, 플로이드 워셜 알고리즘 등이 있다.각 목적과 쓰임에 따라서 선택되어 사용이 되는데, 다익스트라 알고리즘의 경우 그래프에 여러개의 노드가 있을 때 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘이다.간선 가중치가 0보다 작은 음의 간선이 없을 때 정상적으로 동작하는데, GPS 소프트웨어의 기본 알고리즘으로 채택되기도 한다. 다익스트라 알고리즘을 소스코드로 ..
알고리즘 개념정리: Dynamic Programming Dynamic Programming이란?알고리즘 문제를 풀이할 때 최적의 해를 구하기에 연산량이 많아서 시간이 많이 필요하거나, 메모리 공간이 많이 필요한 문제들이 있다. 그래서 문제를 풀 때 연산 속도와 메모리 공간을 최대한으로 절약할 수 있게 효율적으로 알고리즘을 작성해야 한다.이번에 정리할 Dynamic Programming은 메모리 공간을 약간 더 사용하면 연산속도를 비약적으로 증가시킬 수 있는 방법이다. Dynamic Programming의 기본적인 아이디어를 살펴보자. 이 알고리즘은 아래 두가지 조건을 만족할 때 적용할 수가 있다.1) 큰 문제를 작은 문제로 나눌 수 있는가? -> Yes2) 작은 문제에서 구한 정답이 그것을 포함하는 큰 문제에도 동일하게 적용되는가? -> Yes  이를 만족하..
Algorithm 개념정리: Greedy Algorithm Greedy Algorithm이란?Greedy Algorithm은 최적의 값을 구해야 하는 상황에서 사용되는 기법이다.'매 선택에서 당장의 결과가 가장 최적인 답을 선택'하여 나아가는 과정이기 때문에,근시안적으로 최적의 경로를 찾아가다보면 결과적으로도 최적의 결과에 도달할 수 있을 것이라는 사고방식으로 문제를 풀어나는 방법이다. 그렇기 때문에 풀려고 하는 문제가 Greedy Algorith에 적합한 문제인지 판별 후 사용해야 한다.당장의 매 선택에 대해서는 최적이지만 종합적으로 봤을 때 문제의 결과가 최적의 값으로 도출된다는 보장은 없기 때문이다. Greedy Algorithm으로 접근할 수 있는 대표적인 상황이 '가장 적은 화폐 개수로 돈 계산하기'이다.50000, 10000, 5000, 1000, 5..
백준 1541: 잃어버린 괄호 📃 문제: 백준 1541(잃어버린 괄호) 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net [문제] 세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 🥈 난이도: 실버 2 📖 풀이 사고 과정 👩‍💻 구현 코드(c++ 사용) #include #include using namespace std; vecto..
1931: 회의실 배정 📃 문제: 백준 1931(회의실 배정) 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net [문제] 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. [입력] 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진..
백준 1744: 수 묶기 📃 문제: 백준 1744(수 묶기) 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net [문제] 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 상관없이 묶을 수 있다. 하지만, 같은 위치에 있는 수(자기 자신)를 묶는 것은 불가능하다. 그리고 어떤 수를 묶게 되면, 수열의 합을 구할 때 묶은 수는 서로 곱한 후에 더한다. 예를 들면, 어떤 수열이 {0, 1, 2..
백준 1715: 카드 정렬하기 📃 문제: 백준 1715(카드 정렬하기) 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net [문제] 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장의 숫자 카드 묶음을 합치려면 50번의 비교가 필요하다. 매우 많은 숫자 카드 묶음이 책상 위에 놓여 있다. 이들을 두 묶음씩 골라 서로 합쳐나간다면, 고르는 순서에 따라서 비교 횟수가 매우 달라진..
백준 11047: 동전 0 📃 문제: 백준 11047(동전 0) 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. [입력] 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로..