본문 바로가기
반응형

Problem Solving/BOJ228

백준 9184번 신나는 함수 실행 - C++ 풀이 1. 메모이제이션을 통해 시간을 줄일 수 있다. 2. 재귀 함수를 똑같이 구현하되, 이미 구했던 값이라면 재귀호출을 하지 않고 저장해둔 값을 바로 리턴한다. 1. 메모이제이션을 통해 시간을 줄일 수 있다. 단순한 재귀 호출을 통해 w(a, b, c)를 구할 경우 중복되는 호출이 많아진다. 20 이하의 a, b, c 에 대해서만 구해주면 되므로 총 구해야 하는 함수값은 20^3개 뿐이다. 모든 (a, b, c)에 대해 w(a, b, c) 값을 저장해두자. 2. 재귀 함수를 똑같이 구현하되, 이미 구했던 값이라면 재귀호출을 하지 않고 저장해둔 값을 바로 리턴한다. 재귀 함수를 똑같이 구현하되, 만약 이미 구했던 값이라면 재귀호출을 하지 않고 저장해두었던 값을 바로 리턴해주면 된다. #include #incl.. 2023. 9. 4.
백준 2563번 색종이 - C++ 풀이 1. 도화지를 100X100 그리드로 나눈다. 2. 각 색종이를 추가하면서 그리드에 색종이가 붙어있음을 표시한다. 3. 모든 그리드를 탐색하면서 색종이가 붙은 그리드의 개수를 센다. 1. 도화지를 100X100 그리드로 나눈다. 색종이가 붙은 영역의 넓이를 구해야 한다. 넓이 계산을 쉽게 하기 위해 각 칸의 넓이가 1이 되도록 그리드를 그린다. 100X100으로 나누면 된다. 2. 각 색종이를 추가하면서 그리드에 색종이가 붙어있음을 표시한다. 각 색종이의 위치가 주어진다. 모든 색종이의 크기는 10X10으로 동일하므로, 색종이가 붙는 100개의 그리드를 순회하면서 해당 그리드에 색종이가 붙었음을 기록해둔다. 3. 모든 그리드를 탐색하면서 색종이가 붙은 그리드의 개수를 센다. 모든 색종이를 붙였으면 이제 .. 2023. 9. 4.
백준 3584번 가장 가까운 공통 조상 - C++ 풀이 1. O(N)의 LCA 알고리즘을 사용하여 구한다. 1. O(N)의 LCA 알고리즘을 사용하여 구한다. 단순한 LCA(Lowest Common Ancestor) 구하기 문제이다. N = 10,000 밖에 되지 않기 때문에 희소 테이블을 사용하지 않는 O(N)의 LCA로도 충분하다. #include #include #include using namespace std; const int MAX = 10'001; int N; int depth[MAX], parent[MAX]; vector children[MAX]; void dfs(int curr) { for (auto child: children[curr]) { depth[child] = depth[curr] + 1; dfs(child); } } int NC.. 2023. 8. 21.
백준 2224번 명제 증명 - C++ 풀이 1. 전건과 후건을 각각 그래프의 노드로 생각하고, 전건에서 후건으로 가는 간선을 추가한다. 2. 만약 정점 P에서 정점 Q로 가는 경로가 존재한다면 P => Q를 증명할 수 있다. 3. 플로이드와샬을 사용하여 모든 순서쌍 (p, q)에 대해 p에서 q로 가는 경로가 있는지 확인한다. 1. 전건과 후건을 각각 그래프의 노드로 생각하고, 전건에서 후건으로 가는 간선을 추가한다. 주어지는 명제들의 전건과 후건을 각각 그래프의 노드라고 생각하자. 그리고 전건과 후건을 방향 간선(전건->후건)으로 잇는다. 2. 만약 정점 P에서 정점 Q로 가는 경로가 존재한다면 P => Q를 증명할 수 있다. 완성된 그래프에서 만약 정점 P에서 정점 Q로 가는 경로가 존재한다면, P => Q를 증명할 수 있다는 의미이다. 3... 2023. 8. 21.
백준 1943번 동전 분배 - C++ 풀이 1. 동전들의 금액 합이 홀수인 경우 절대 둘로 나눌 수 없다. 2. dp(idx, price): [idx...]번 동전들로 price원을 만들 수 있는가 3. dp(idx, price) = max(dp(idx+1, price - coin*cnt)) (0 ≤ cnt ≤ idx번 동전개수) 1. 동전들의 금액 합이 홀수인 경우 절대 둘로 나눌 수 없다. 만약 동전들의 금액 합이 홀수인 경우 절대 둘로 나눌 수 없다. 짝수인 경우에는 sum/2를 만들 수 있는지 확인해보면 된다. 1. dp(idx, price): [idx...]번 동전들로 price원을 만들 수 있는가 dp(idx, price)를 위와 같이 정의하자. 우리가 최종적으로 구하려는 값은 dp(0, sum/2)이다. (이때 sum은 주어진 동전들.. 2023. 8. 12.
반응형