본문 바로가기

Problem Solving1486

[백준] 2250 트리의 높이와 너비 - Graph Theory / Java • 문제 링크 2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net • 풀이 과정 각 층(level) 에 존재하는 노드의 간격의 최대, 최소값을 저장할 max, min 배열을 생성하여 각 층마다 0, n(노드의 개수) 값으로 초기화한다. 문제에 주어진 트리를 부모, 현재, 왼쪽 자식, 오른쪽 자식 노드의 값을 가진 Node 객체 배열을 통해 구성하며, 각각의 왼쪽, 오른쪽 자식 노드의 존재 여부에 따라 현재 노드를 부모 노드로 지정한다. 이 중 부모 노드가 없는 노드를 찾아 해당 노드를 루트 노드.. 2022. 9. 7.
[백준] 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.
[백준] 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.