알고리즘 - Baekjoon/Gold

    [백준] 17073번 : 나무 위의 빗물 Gold5(골드5) - JAVA[자바]

    [Gold V] 나무 위의 빗물 - 17073 문제 링크 성능 요약 메모리: 131348 KB, 시간: 480 ms 분류 그래프 이론, 그래프 탐색, 수학, 트리 제출 일자 2024년 1월 17일 22:07:48 문제 설명 트리란, 사이클이 없는 연결 그래프를 의미한다. 위 그림은 1번 정점을 루트로 하는 어떤 트리를 나타낸 모습이다. 사실 이 트리는 영훈이가 뒷마당에서 기르고 있는 나무이다. 어제는 비가 왔기 때문에, 트리의 1번 정점에는 W만큼의 물이 고여 있다. 1번 정점을 제외한 모든 정점에는 아직 물이 고여 있지 않은 상태이다. 이제 매초마다 모든 정점은 아래의 작업을 순서대로 반복한다. 물을 가지고 있으며, 자식 정점이 있다면 자식 정점 중 하나를 골라 물을 1 준다. 자식 정점이 여러 개라면..

    [백준] 11404번 : 플로이드 Gold4(골드4) - JAVA[자바]

    [Gold IV] 플로이드 - 11404 문제 링크 성능 요약 메모리: 42752 KB, 시간: 344 ms 분류 플로이드–워셜, 그래프 이론, 최단 경로 제출 일자 2024년 1월 17일 00:19:23 문제 설명 n(2 ≤ n ≤ 100)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1 ≤ m ≤ 100,000)개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다. 모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발..

    [백준] 1068번 : 트리 Gold5(골드5) - JAVA[자바]

    [Gold V] 트리 - 1068 문제 링크 성능 요약 메모리: 11564 KB, 시간: 76 ms 분류 깊이 우선 탐색, 그래프 이론, 그래프 탐색, 트리 제출 일자 2024년 1월 16일 00:09:22 문제 설명 트리에서 리프 노드란, 자식의 개수가 0인 노드를 말한다. 트리가 주어졌을 때, 노드 하나를 지울 것이다. 그 때, 남은 트리에서 리프 노드의 개수를 구하는 프로그램을 작성하시오. 노드를 지우면 그 노드와 노드의 모든 자손이 트리에서 제거된다. 예를 들어, 다음과 같은 트리가 있다고 하자. 현재 리프 노드의 개수는 3개이다. (초록색 색칠된 노드) 이때, 1번을 지우면, 다음과 같이 변한다. 검정색으로 색칠된 노드가 트리에서 제거된 노드이다. 이제 리프 노드의 개수는 1개이다. 입력 첫째 ..

    [백준] 2504번 : 괄호의 값 Gold5(골드5) - JAVA[자바]

    [Gold V] 괄호의 값 - 2504 문제 링크 성능 요약 메모리: 11556 KB, 시간: 76 ms 분류 자료 구조, 구현, 스택 제출 일자 2024년 1월 14일 16:01:15 문제 설명 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X가 올바른 괄호열이면 ‘(X)’이나 ‘[X]’도 모두 올바른 괄호열이 된다. X와 Y 모두 올바른 괄호열이라면 이들을 결합한 XY도 올바른 괄호열이 된다. 예를 들어 ‘(()[[]])’나 ‘(())[][]’ 는 올바른 괄호열이지만 ‘([)]’ 나 ‘(()()[]’ 은 모두 올바른 괄호열이 아니다. 우리는 어떤 올바른..

    [백준] 1987번 : 알파벳 Gold4(골드4) - JAVA[자바]

    [Gold IV] 알파벳 - 1987 문제 링크 성능 요약 메모리: 296464 KB, 시간: 1988 ms 분류 백트래킹, 깊이 우선 탐색, 그래프 이론, 그래프 탐색 제출 일자 2024년 1월 14일 01:08:01 문제 설명 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 프로그램을 작성하시오. 말이 ..

    [백준] 14500번 : 테트로미노 Gold4(골드4) - JAVA[자바]

    [Gold IV] 테트로미노 - 14500 문제 링크 성능 요약 메모리: 31664 KB, 시간: 508 ms 분류 브루트포스 알고리즘, 구현 제출 일자 2024년 1월 12일 15:02:43 문제 설명 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다..

    [백준] 1753번 : 최단경로 Gold4(골드4) - JAVA[자바]

    [Gold IV] 최단경로 - 1753 문제 링크 성능 요약 메모리: 121704 KB, 시간: 1288 ms 분류 데이크스트라, 그래프 이론, 최단 경로 제출 일자 2024년 1월 11일 22:06:30 문제 설명 방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다. 입력 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수 (u, v, w)가 순서대..

    [백준] 5639번 : 이진 검색 트리 Gold5(골드5) - JAVA[자바]

    [Gold V] 이진 검색 트리 - 5639 문제 링크 성능 요약 메모리: 16088 KB, 시간: 376 ms 분류 그래프 이론, 그래프 탐색, 재귀, 트리 제출 일자 2024년 1월 10일 21:12:46 문제 설명 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 크다. 왼쪽, 오른쪽 서브트리도 이진 검색 트리이다. 전위 순회 (루트-왼쪽-오른쪽)은 루트를 방문하고, 왼쪽 서브트리, 오른쪽 서브 트리를 순서대로 방문하면서 노드의 키를 출력한다. 후위 순회 (왼쪽-오른쪽-루트)는 왼쪽 서브트리, 오른쪽 서브트리, 루트 노드 순서대로 키를 출력한다. 예..