목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 www.acmicpc.net 문제풀이 https://www.acmicpc.net/problem/1967 1967번 문제도 트리와 지름을 구하는 문제이다. 정점의 최대 개수가 적기 때문에 안 풀었다면 먼저 푸는 것을 추천한다. https://githubseob.tistory.com/27 [C++] 백준 / 1967 / 트리의 지름 문제 https://www.acmicpc.net/problem/1967 19..

문제 https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제풀이 BFS를 이용하여 풀었다. 1 2를 입력받으면 양방향 간선이므로 tree[1]에 2를 push, tree[2]에 1을 push 했다. 큐가 빌 때까지 반복하면서 해당 정점과 연결된 정점들을 방문한 적이 없으면 큐에 push 하고 방문한다. 현재 노드가 1이고 다음 노드가 2이면, 2의 부모 노드는 1이 된다. 큐가 비면 반복문을 종료하고 1을 제외한 2부터 N까지 부모 노드를 저장한 벡터의 값들을 출력한다. vectortree(N + 1, vec..

문제 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자 www.acmicpc.net 문제풀이 void Preorder(char node, const vector& tree) { cout left_child >> right_child; tree[parent - 'A'][0] = left_child; tree[parent - 'A'][1] = right_child; } Preorder('A', tree); cout

문제 https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 문제풀이 트리의 지름을 쉽게 구하는 공식이 있다는 것을 모르는 상태로 단순하게 DFS를 하여 지름을 구하는 방법을 썼다. 노드의 개수가 더 많았으면 시간 초과로 틀릴 알고리즘이다. vectortree[10001]; vectorvisit; int max_dist; tree의 형태는 이런 식이다. for (y = 1; y > current_nod..

문제 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 문제풀이 토마토 문제를 아직 안 풀었다면 7576번 먼저 푸는 것을 추천함. 7576번은 2차원, 7569번은 3차원 문제 https://www.acmicpc.net/problem/7576 3차원 배열을 거의 안 쓰다 보니 그 부분에서 좀 헤맸다. 입력받을 때 토마토가 0or1이면 도달해야 되는 토마 토수 +1, 1이면 현재 익은 토마토 수 +1, 큐에 좌표값을 집어넣..

문제 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 문제풀이 전형적인 DFS문제이다. 입력받는 값들을 표처럼 virus벡터에 push한다. 문제에서 1번 컴퓨터 부터시작하라 했으므로 DFS(1)을 실행하여 1부터 시작한다. DFS함수를 실행했으면 visit벡터에 방문한걸 표시하고 크기만큼 반복해서 깊이탐색을 시작한다. 방문안한 노드를 발견하면 DFS를 하고 answer값에 1을 더한다. 1->2 2->3 3번 컴퓨터랑 연결된 2번 컴퓨터는 이미 방..

문제 https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제풀이 가장 긴 증가하는 부분 수열 다른 문제부터 풀면 편하다 해당 문제: https://www.acmicpc.net/problem/11053 해당 문제풀이: https://githubseob.tistory.com/17 현재 숫자가 n일 때 1부터 n-1까지 돌면서 최장 길이를 찾고 DP[n][0]에, n을 ..

문제 https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 문제풀이 OXXOO OXOO OXXO OXO 포도주는 3번 연속 마실수 없다, 경우의 수에서 3번 연속 안 마시고 최댓값을 낼 수 없다. 따라서 N번째를 마신다고 가정했을 때 DP[N] = DP[i-4] + Arr[i-1] or DP[i-3] + Arr[i-1] or DP[i-3] or DP[i-2] 중 최대값에 Arr[N]값을 더한 값이다. DP[N]은 N번째를 무조건 마신다고 가정하였으므로..

문제 https://www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N 과 건물간의 건설순서규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 문제풀이 vectororder; vectorfoundation; vectoranswer; vectorbuilding_time; vectorvisit; int goal; order벡터는 입력을 받는 벡터이다. 숫자 2개를 입력받으면 order[y][x] 형태인데 y건물을 지으면 x 건물을 지을 수 있다는 의미이다. foundation[y][x]벡터는 x건물을 지어야 y건물을 지을 수 있다..