본문 바로가기

분류 전체보기69

[백준] 2252번 - 줄 세우기 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 문제 N명의 학생 중 두 학생의 키를 M번 비교한 데이터가 주어질 때, 키 순서를 유추하여 줄을 세우시오. 답이 여러가지인 경우에는 아무거나 출력해도 무방함. 조건 1 2023. 6. 11.
[백준] 3584번 - 가장 가까운 공통 조상 3584번: 가장 가까운 공통 조상 루트가 있는 트리(rooted tree)가 주어지고, 그 트리 상의 두 정점이 주어질 때 그들의 가장 가까운 공통 조상(Nearest Common Anscestor)은 다음과 같이 정의됩니다. 두 노드의 가장 가까운 공통 조상은, 두 www.acmicpc.net LCA(Lowest Common Ancestor) 알고리즘을 사용하여 최소 공통 조상을 구하는 문제이다. 하나의 쌍에 대한 LCA를 구하면 되기 때문에 문제풀이 원리는 아래 LCA 설명 링크로 대신하고 전체 코드만 기록해두겠다. LCA 개념 및 구현 방법 [알고리즘] 최소 공통 초상(LCA) Lowest Common Ancestor 한국말로 직역하면 최소 공통 조상이다. 자료구조 트리에 사용하며, 트리 내 두 .. 2023. 6. 11.
[알고리즘] 최소 공통 초상(LCA) Lowest Common Ancestor 한국말로 직역하면 최소 공통 조상이다. 자료구조 트리에 사용하며, 트리 내 두 노드 u, v의 공통 부모 중 가장 가까운 노드를 찾고자 할 때 사용할 수 있는 알고리즘의 한 유형이다. 간단한 그림으로 LCA의 한 예시를 보여주겠다. 1번 노드를 루트노드로 하는 위와 같은 트리가 있을 때, 6번 노드와 5번 노드의 최소 공통 조상인 LCA(5, 6)은 2번 노드이다. LCA의 정의에 대해서 간단히 살펴봤으므로 다음은 LCA가 어떻게 동작하는지 알아보겠다. 일반적으로 트리 관련 문제에서는 두 정점을 잇는 간선에 대한 정보가 주어진다. 그리고 간선에 대한 정보를 사용하여 이중 배열 또는 리스트 타입 배열 객체를 사용하여 전체 트리 구조를 저장할 수 있다. 만약 처음부터.. 2023. 6. 11.
[백준] 15663번 - N과 M (9) 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제 N개의 자연수 중에서 M개를 고른 수열을 중복 없이 사전 순 기준 증가하는 순서로 출력하시오. 조건 1 2023. 6. 10.
[백준] 14002번 - 가장 긴 증가하는 부분 수열 4 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 이전에 풀이한 백준 11053번 가장 긴 증가하는 부분 수열 문제의 풀이에 가장 긴 증가하는 부분 수열의 인덱스를 저장해주는 개념을 적용하면 풀이할 수 있다. 만약 백준 11053번을 아직 해결하지 않았다면 먼저 해결하고 오는 것이 도움이 될 것이다. 백준 11053번 풀이 [백준] 11053번 - 가장 긴 증가하는 부분 수열 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주.. 2023. 6. 8.
[백준] 1613번 - 역사 1613번: 역사 첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다. www.acmicpc.net 문제 전체 n개의 역사 속 사건에 대하여 세준이가 알고 있는 두 사건의 전후관계의 수가 k개일 때, s개의 사건 쌍에 대한 전후 관계를 판단하시오. 조건 1 2023. 6. 7.
[백준] 11404번 - 플로이드 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 문제 n개의 도시가 존재하고 도시 A에서 출발하여 도시 B에 도착하는 비용 c의 버스 정보가 M개 주어질 때, 모든 도시의 쌍 (A, B)에 대하여 도시 A에서 도시 B로 가는데 필요한 비용의 최솟값을 구하여라. 조건 시작 도시와 도착 도시가 같은 경우는 없다. 시작 도시와 도착 도시를 연결하는 노선은 하나가 아닐 수 있다. 도시 i에서 도시 j로 갈 수 없는 경우에는 0 출력 2 2023. 6. 7.
[백준] 11403번 - 경로 찾기 11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net 플로이드 워셜(Floyd - Warshall) 알고리즘에 대한 기본 개념을 이해할 수 있는 문제이다. 이전에 학습한 다익스트라 알고리즘이 하나의 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘이었다면, 플로이드 - 워셜 알고리즘은 모든 정점에서 다른 모든 정점까지의 최단 거리를 구하고자 할 때 사용하는 알고리즘이다. 플로이드 워셜 알고리즘의 작동 방법은 다이나믹 프로그래밍을 적용한 완전 탐색 방법으로, 정점의 갯수가 N 일 때 시간 복잡도 O(N^3)을 갖는다. 따라서 N의 크기가 너무 크다면 .. 2023. 6. 7.
[백준] 1753번 - 최단경로 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 www.acmicpc.net 다익스트라 알고리즘은 그래프에서 출발 정점으로부터 이동할 수 있는 모든 정점까지의 최단 거리를 구할 때 사용하는 알고리즘 중 한 종류이다. 해당 문제는 다익스트라 알고리즘에 대한 기본 개념을 이해하기에 좋다. 다익스트라 알고리즘에 대한 설명 및 문제 풀이 방법은 아래 글을 참고하자. [알고리즘] 다익스트라 알고리즘 다익스트라 알고리즘은 다이나믹 프로그래밍을 활용한 대표적인 최단 경로 탐색 알고리즘이다. 간단하게 DFS 혹은 .. 2023. 6. 6.