본문 바로가기

전체 글1323

[백준] 1991 트리 순회 - Graph Theory / Java • 문제 링크 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net • 풀이 과정 위와 같은 Tree Graph 가 주어졌을 때 전위 순회(Preorder) 는 루트, 왼쪽, 오른쪽 순으로 탐색, 결과는 A B D H I E J C F G K, 중위 순회(Inorder) 는 왼쪽, 루트, 오른쪽 순으로 탐색, 결과는 H D I B J E A F C K G, 후위 순회(Postorder) 왼쪽, 오른쪽, 루트 순으로 탐색, 결과는 H I D J E B F K G C A 를 나타내며, 이를 바탕으로 각각의 .. 2022. 9. 6.
[백준] 2133 타일 채우기 - Dynamic Programming / Java • 문제 링크 2133번: 타일 채우기 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. www.acmicpc.net • 풀이 과정 문제에 제시된 타일의 크기상 n 이 홀수인 경우에는 타일을 채울 수 없으므로, n 이 짝수일 때만 경우의 수를 구한다. n = 0 타일을 채울 수 있는 경우는 타일을 채우지 않는 경우의 수 1가지로 dp[0] = 1 으로 초기화, n = 2 타일을 채울 수 있는 경우는 총 3가지로 dp[2] = 3, n = 4 타일은 n = 2 의 각각의 경우에 * 3 을 한 dp[2] * 3 = 9 이다. 다만 n >= 4 부터 각각에 예외로 추가되는 경우의 수가 2가지씩 존재하므로 결과적으로 dp[4] = dp[2] * 3 + 2 = 11 이 성립한다. n.. 2022. 9. 5.
[백준] 11054 가장 긴 바이토닉 부분 수열 - Dynamic Programming / Java • 문제 링크 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net • 풀이 과정 바이토닉 수열이란 특정 값을 기준으로 왼쪽 부분은 오름차순, 오른쪽 부분은 내림차순인 수열을 말한다. 따라서 왼쪽에서 오른쪽으로 오름차순인 부분 수열의 길이를 구하여 dpIn 배열에 저장하고, 오른쪽에서 왼쪽으로 오름차순인 부분수열, 즉 내림차순 부분 수열의 길이를 구하여 dpDe 배열에 저장한다. 이 후 각각 기준이 되는 원소의 두 부분수열의 길이 값을 더하여 오름차순과 내림차순이 합쳐진 바이토닉 부분수열의 길이를 구한다. 이때 기준이 되는 원소 1개가.. 2022. 9. 4.
[백준] 11722 가장 긴 감소하는 부분 수열 - Dynamic Programming / Java • 문제 링크 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net • 풀이 과정 [백준] 11053 가장 긴 증가하는 부분 수열 - Dynamic Programming / Java • 문제 링크 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 graycode.tistory.co.. 2022. 9. 3.
[백준] 11055 가장 큰 증가 부분 수열 - Dynamic Programming / Java • 문제 링크 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net • 풀이 과정 • 풀이 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public clas.. 2022. 9. 2.
[백준] 2156 포도주 시식 - Dynamic Programming / Java • 문제 링크 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net • 풀이 과정 포도주의 정보를 입력받을 배열 wine 과 포도주의 양의 값을 누적할 dp 배열을 포도주의 개수 n + 1 만큼의 크기로 생성한다. dp[1] 의 값은 포도주를 한잔만 마셨으므로 wine[1] 의 값으로 초기화, dp[2] 의 값은 wine[1] + wine[2] 의 값으로 초기화하되, n = 1 인 경우를 고려해 조건문을 건다. 현재 위치까지 누적된 포도주 양의 경우의 수는 연속으로 3잔을 마실 수 없는 조건에 의하여 O 는 포도주를.. 2022. 9. 1.