본문 바로가기

백준31

BOJ 17471 - 게리맨더링(완전탐색, dfs) https://www.acmicpc.net/problem/17471 17471번: 게리맨더링 선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다. www.acmicpc.net - 노드의 갯수(도시 갯수)가 작기 때문에 도시들을 두 팀으로 나누는 모든 경우의 수를 비트마스킹으로 탐색해 나간다. 그리고 dfs를 통해서 나눠진 팀들(선거구)끼리 한 지점으로부터 모두 순회할 수 있는지를 체크하는데 파라미터로 팀원수, 같은 팀인지 여부를 계속 넘겨주면서 계속 탐색해나간다. 만약 두 팀의 팀원수 합이 전체 노드갯수가 많거나 작지 않고 n개이면 두 팀 간의 인구 차이를 ans에 계속 비교해나가면서 풀어.. 2021. 8. 15.
트리 구현과 순회 - 이론 및 문제 정리 https://www.acmicpc.net/step/23 트리 단계 루트가 1인 트리가 주어질 때, 각 노드의 부모를 구하는 문제 www.acmicpc.net 백준 트리문제에 종만북을 참고하여 정리함. - tree 일반 개념 트리: 계층적인 구조를 표현 - 노드node, 간선edge 으로 구성됨 depth: root~특정 노드까지의 간선 수 , height: root~leaf노드까지의 간선 수(트리의 높이) 트리의 기본적인 성질: 노드가 N개인 트리는 항상 N-1개의 간선를 가진다 트리에서 루트에서 어떤 노드로 가는 경로는 유일하다. 또한 임의의 두 노드 간의 경로도 유일하다. 트리의 재귀적 속성에서 중요한 포인트: 모든 트리는 루트와 루트 밑에 있는 서브트리의 집합이다. struct Node { str.. 2021. 8. 7.
BOJ 1967 - 트리의 지름(tree 구현, 순회, dfs) https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net - 간선의 가중치가 있는 트리에서 서로 가장 먼 노드의 거리를 구하는 문제이다. 최장 경로의 양 끝 노드가 항상 root 이거나 leaf node여야 한다. 따라서 2가지 케이스를 따져야한다. 1. 가장 긴 root-leaf 경로의 길이(즉 트리의 height) 2. 가장 긴 leaf-leaf 경로의 길이 풀이 : dfs 방식 이진트리이기 때문에 노드를 pair로 선언해서 to.. 2021. 8. 7.
BOJ 17281 - ⚾ 야구(순열, 백트래킹, 브루트포스, 구현) https://www.acmicpc.net/problem/17281 17281번: ⚾ ⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종 www.acmicpc.net - permutation STL 혹은 백트래킹으로 순열을 구해서 그 순열에 맞게 야구게임을 구현했을 때 얻을 수 있는 최대점수를 구하면 된다. - 1번 선수를 4번 타자로 미리 결정했다. 부분이 함정지문이였다 #include #include #include using namespace std; int n, ans; int a[50][9]; // 이닝 50 int solve(vector& p) { int.. 2021. 8. 3.