목록전체 글 (145)
Partially Committed
https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 정수 n 을 1로 만들기 위한 연산 횟수의 최솟값을 dp[n] 이라고 가정하자. 그러면 dp[0] = dp[1] = 0, dp[2] = 1, dp[3] = 1 dp table 을 아래와 같이 bottom-up 방식으로 채워나갈 수 있다. 1. N 에 대하여 N-1 이 가능하다면 dp[n] = dp[n-1]+1 2. N 이 2로 나누어 떨어지면 dp[n] 은 dp[n/2]+1 와 dp[n-1]+1 중 더 작은 값을 선택 3. N 이 3으로 나누어 떨어지면 dp[n] 은 dp[n/3]+1 와 dp[n-1]+1 중 ..
https://www.acmicpc.net/problem/1947 1947번: 선물 전달 경우의 수를 1,000,000,000으로 나눈 나머지를 첫째 줄에 출력한다. www.acmicpc.net n 명의 사람이 서로의 선물을 교환하는데, 자기의 선물을 자기 자신이 받으면 안된다. 이러한 상황은 완전 순열을 이해하고 있으면 쉽게 구할 수 있다. https://namu.wiki/w/%EC%99%84%EC%A0%84%EC%88%9C%EC%97%B4 완전순열 - 나무위키 완전순열을 다루는 문제에서는, 그냥 D5D_5D5까지는 외워두자. 차례대로 0,1,2,9,440, 1, 2, 9, 440,1,2,9,44이다. D5=44D_5=44D5=44마저도 너무 많다고 하여 잘 나오지 않으며 D6=265D_6=265D..
https://www.acmicpc.net/problem/1256 1256번: 사전 동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 김진영 조교는 동호와 규완이에게 특별 과제를 주었다. 특별 과제는 특별한 문자열로 이루어 진 사전을 만드는 것이다. 사전에 수록되 www.acmicpc.net a 와 z 로만 구성된 문자열을 만들 수 있는 경우의 수를 구한다는 것은 n+m 개 중에서 n 개(혹은 m 개) 를 선택하는 경우의 수와 같다. (a 는 n 개, z 는 m 개) 각각의 문자열이 사전식 배열로 이루어져있다고 가정하므로, k 번째 문자열을 알아내기 위해서는, n+m 개의 문자 중에서 n 개 (혹은 m개) 를 선택하는 경우의 수를 먼저 구해야 한다. 그리고 나서, a 를 선택했다고 가정하고 나머..
https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 더보기 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오. 예를 들어 위와 같은 이진 트리가 입력되면, 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식) 중위 순회한 결과 : DBAECFG // (왼쪽 자..
https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 더보기 문제 트리에서 리프 노드란, 자식의 개수가 0인 노드를 말한다. 트리가 주어졌을 때, 노드 하나를 지울 것이다. 그 때, 남은 트리에서 리프 노드의 개수를 구하는 프로그램을 작성하시오. 노드를 지우면 그 노드와 노드의 모든 자손이 트리에서 제거된다. 예를 들어, 다음과 같은 트리가 있다고 하자. 현재 리프 노드의 개수는 3개이다. (초록색 색칠된 노드) 이때, 1번을 지우면, 다음과 ..
https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 더보기 문제 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다. 출력 첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다. 예제 입력 1 7 1 6 6 3 3 5 4 1 2 4 4 7 예제 출력 1 4 6 1 3..
https://www.acmicpc.net/problem/1414 1414번: 불우이웃돕기 첫째 줄에 컴퓨터의 개수 N이 주어진다. 둘째 줄부터 랜선의 길이가 주어진다. i번째 줄의 j번째 문자가 0인 경우는 컴퓨터 i와 컴퓨터 j를 연결하는 랜선이 없음을 의미한다. 그 외의 경우는 랜선 www.acmicpc.net 더보기 문제 다솜이는 불우이웃 돕기 활동을 하기 위해 무엇을 할지 생각했다. 마침 집에 엄청나게 많은 랜선이 있다는 것을 깨달았다. 마침 랜선이 이렇게 많이 필요 없다고 느낀 다솜이는 랜선을 지역사회에 봉사하기로 했다. 다솜이의 집에는 N개의 방이 있다. 각각의 방에는 모두 한 개의 컴퓨터가 있다. 각각의 컴퓨터는 랜선으로 연결되어 있다. 어떤 컴퓨터 A와 컴퓨터 B가 있을 때, A와 B가 ..
https://www.acmicpc.net/problem/17472 import java.io.*; import java.util.*; public class Main { static int[] dx = {0, 0, -1, 1}; static int[] dy = {-1, 1, 0, 0}; static int n; static int m; static int islandCnt; static PriorityQueue pq; static int[] parent; static int[][] graph; static boolean[][] visited; static ArrayList local_info; static ArrayList global_info; public static void main(String[..