본문 바로가기
반응형

Problem Solving/BOJ228

백준 2668번 숫자고르기 - C++ 풀이 1. 첫째 줄에서 둘째 줄로 가는 간선을 추가한다. 2. 완성된 그래프에서 사이클에 속하는 숫자들을 선택한다. 1. 첫째 줄에서 둘째 줄로 가는 간선을 추가한다. 문제에 주어진 예시 상황에서 첫째 줄의 1을 선택했다고 가정하자. 이에 대응하는 둘째 줄 숫자는 3이므로 첫째줄에서도 3을 추가해야 한다. 따라서 첫째 줄의 3을 고르고 나면, 또 첫째 줄 3에 대응하는 둘째 줄 숫자는 1이므로 첫째줄에서 1을 골라야 한다. 이러한 흐름을 그래프로 나타낼 수 있다. 각 숫자를 정점이라고 생각하고, 첫째 줄에서 둘째 줄로 가는 간선을 추가하여 두 집합이 일치하기 위해 추가해야 하는 수의 흐름을 나타낸다. 문제에서 주어진 예시 상황의 경우 1 -> 3, 2 -> 1, 3 -> 1,... 을 추가하면 된다. 2. 완.. 2022. 8. 9.
백준 5582번 공통 부분 문자열 - C++ 풀이 1. dp(p, q) = S[p...]와 T[q...]가 앞에서부터 일치하는 최대 글자 수 2. S[p] = T[q]인 경우 dp(p, q) = 1 + dp(p+1, q+1)이고, 아닌 경우 0이다. 3. dp(p, q)의 최댓값이 최장 공통부분 문자열의 길이이다. 1. dp(p, q) = S[p...]와 T[q...]가 앞에서부터 일치하는 최대 글자 수 dp(p, q)를 위와 같이 정의하자. 2. S[p] = T[q]인 경우 dp(p, q) = 1 + dp(p+1, q+1)이고, 아닌 경우 0이다. S[p] = T[q]인 경우, 그다음 글자를 비교해야 하므로 dp(p, q) = 1 + dp(p+1, q+1)이 된다. dp(p, q)는 "앞에서부터" 일치하는 최대 글자 수이므로, S[p] != T[q]인.. 2022. 8. 4.
백준 2637번 장난감 조립 - C++ 풀이 1. 위상 정렬을 사용하여 각 부품을 조립하기 위한 부품의 개수를 누적 계산한다. 1. 위상 정렬을 사용하여 각 부품을 조립하기 위한 부품의 개수를 누적 계산한다. 부품들 간에 선행 관계가 존재하므로 위상 정렬을 사용해서 해결할 수 있다. 위상 정렬 과정에서 각 부품을 만들기 위한 기본 부품의 개수를 누적해서 계산해준다. #include #include #include using namespace std; typedef pair pii; int N, M; vector indegree(101); vector adjs[101]; vector topologySort() { vector parts(N+1, vector(N+1, 0)); queue q; for (int i=1; i N >> M; for (int .. 2022. 8. 3.
백준 2234번 성곽 - C++ 풀이 1. DFS/BFS를 사용해서 방의 개수를 센다. 2. DFS/BFS를 사용해서 각 방의 넓이를 구한다. 3. 2에서 구한 값을 사용하여 모든 벽에 대해 해당 벽을 제거했을 때 얻을 수 있는 방의 크기를 구한다. 1. DFS/BFS를 사용해서 방의 개수를 센다. 방의 개수는 연결 요소의 개수와 같다. DFS나 BFS를 사용하여 연결 요소의 개수를 세준다. 2. DFS/BFS를 사용해서 각 방의 넓이를 구한다. 각 방의 넓이는 각 연결 요소의 크기와 같다. 똑같이 DFS나 BFS를 사용해서 구할 수 있다. 3. 2에서 구한 값을 사용하여 모든 벽에 대해 해당 벽을 제거했을 때 얻을 수 있는 방의 크기를 구한다. 하나의 벽을 제거하면 두 칸이 이어지므로 최대 두 개의 방이 하나로 합쳐질 수 있다. 따라서 벽.. 2022. 8. 2.
백준 5214번 환승 - C++ 풀이 1. 하이퍼 튜브도 노드로 생각한다. 2. 일반 노드 -> 하이퍼 튜브 노드로 가는 간선의 가중치는 0으로 처리한다. 3. BFS를 이용해 1번 정점과 N번 정점 사이의 거리를 구한다. 1. 하이퍼튜브도 노드로 생각한다. 하나의 하이퍼튜브로 연결된 K개의 노드들을 전부 간선으로 이어주려면 O(KM^2)의 시간 복잡도와 공간 복잡도가 필요하다. K, M이 최대 1,000이므로 이 방법은 사용할 수 없다. 대신 하이퍼 튜브를 가상의 노드로 생각하는 방법을 사용한다. 하이퍼 튜브 H로 노드 1, 2, 3이 연결되어있다면 1, 2, 3번 노드 사이에 간선을 추가하지 않고 H번 노드와 각각 1, 2, 3번 노드로 가는 간선 3개 H-1, H-2, H-3만 추가해준다. 결과적으로 1, 2, 3번 노드 사이에 이동이.. 2022. 8. 1.
반응형