본문 바로가기

알고리즘39

[BOJ/백준] 4442번 - 빌보의 생일 문제 링크 http://icpc.me/4442 문제 출처 ICPC > Regionals > North America > Pacific Northwest Regional > 2012 Pacific Northwest Region Programming Contest H번 사용 알고리즘 세그먼트 트리(Inversion Counting) 시간 복잡도 O(NlogN) 풀이 서로 다른 순서로 앉은 쌍의 최솟값을 구하기 위해 Inversion Counting을 사용합니다. 입력이 String으로 들어오기 때문에, string과 인덱스를 받을 자료구조가 필요하므로 map을 사용합니다. std::map은 검색(find), 삽입(insert), 제거(erase) 작업을 log 시간에 수행할 수 있습니다. 전체 코드 #inc.. 2023. 2. 4.
[BOJ/백준] 1162번 - 도로포장 문제 링크 http://icpc.me/1162 문제 출처 USACO February 2009 Contest > Gold 3번 사용 알고리즘 다익스트라 풀이 특정 노드에서 목표 지점까지의 최소 시간을 구해야 하기에, 다익스트라를 사용하면 됩니다. 다만, K개 이하의 도로를 포장할 수 있기 때문에, 이를 해결하기 위한 전략이 필요합니다. 최소 거리를 구하는 배열에 포장한 횟수를 포함해줍시다. dist[N][K] => K개를 포장했을 때, N노드에서의 최소 거리 처음 문제를 접했을 때, 위상 정렬처럼 보였지만 DAG가 아니므로 사용하지 못합니다. 최악의 경우, N의 최댓값(1e5) * 걸리는 시간의 최댓값(1e6), 즉 100억이 되므로, int가 아닌 long long을 사용해야 합니다. 전체 코드 #inc.. 2023. 2. 4.
[BOJ/백준] 7453번 - 합이 0인 네 정수 문제 링크 http://icpc.me/7453 문제 출처 ICPC > Regionals > Europe > Southwestern European Regional Contest > SWERC 2005 E번 사용 알고리즘 이분탐색 unordered_map 풀이 4개의 배열이 주어지고, (a, b, c, d)의 합이 0이 되는 쌍의 갯수를 구해야합니다. 우선, 가장 navie하게 생각한다면 4번의 for문을 돌려 답을 찾는 방법이 있겠습니다. 하지만, N의 최대가 4000이므로 시간 복잡도 O(N^4)로 시간 초과가 발생할 게 분명해보입니다. 그렇다면, 기본적으로 4개의 배열을 A, B 배열의 합, C, D 배열의 합으로 구성된 2개의 배열로 나누어 생각해봅시다. 이후, 해당 문제를 푸는 2가지 방법이 존재.. 2023. 2. 4.
[BOJ/백준] 14502번 - 연구소 C++ 문제 풀이(시간 초과 포함) 문제 링크 : https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net [문제 요약] 0 : 빈 칸 / 1 : 벽 / 2 : 바이러스 바이러스는 상하좌우 인접한 빈 칸으로 모두 펴져나간다. 이때, 우리는 벽을 3개 세울 수 있고, 바이러스가 퍼질 수 없는 곳을 안전 영역이라고 한다. 안전 영역 크기의 최댓값을 구하시오. [문제 접근] 1. 바이러스가 상하좌우로 퍼진다. → BFS 2. 벽을 3개 세울 수 있다. → 조합 : 모든 빈칸(0) 중 3개를 선택해 벽(1).. 2021. 10. 3.
동적 계획법(Dynamic Programming) 동적 계획법(DP) 1. 정의 - 특정 범위까지의 값을 구하기 위해서 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘 - 이미 과거에 구한 값을 활용하여 불필요한 계산을 하지 않는다. 2. DP 언제 쓸까? 1. 최적의 정답을 찾을 때 : (~가능한) 최대값 또는 최소값. 2. 정답의 수를 세야 할 때 : 문제를 해결할 수 있는 경우의 수를 세고 싶을 때. 3. 방법론 - 탑다운(top-down) : 메모이제이션을 사용한 재귀 호출 방식. - 바텀업(bottom-up) : 반복문(for문)을 사용, 일반적으로 점화식을 한 눈에 나타내기에 가독성이 좋다. 이건 한번 검색해서 보시면, 느낌이 오실겁니다! https://blog.naver.com/kks227/220777103650 동적 계획법(.. 2021. 9. 13.
728x90
반응형