목록CodingTest (432)
기록방
👉 문제링크 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net 🔸 문제 분석 🔸 주어진 수열 A의 가장 긴 증가하는 부분 수열 (LIS)의 길이를 출력한다. 🔸 문제 풀이 🔸 n이 100만이므로 LIS의 간단한 풀이 법인 DP를 사용하면, O(n^2)으로 1조로 시간을 초과한다. LIS의 두 번째 풀이법인 이분 탐색을 이용해 O(nlogn)으로 풀이한다. (600만) LIS 배열을 입력 배열 원소를 하나씩 골라 채워간다. 입력 배열의 원소를 채울 자리는 이분 탐색으로 구한다. 🔸 코드 🔸 import java.i..
👉 문제링크 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 🔸 문제 분석 🔸 앞선 건물들이 모두 지어져야 해당 건물을 지을 수 있게 되는 건물 순서 규칙이 존재한다. 건물은 동시에 여러 개를 지을 수 있다. 목표 건물을 짓는데 드는 최소 시간을 출력한다. 🔸 문제 풀이 🔸 건물이 지어지는 순서가 달라질 수 있는데 선행 작업이 존재하므로, 위상 정렬을 사용해서 풀이한다. 동시에 건물을 지었다고 할 때, 가장 오래 걸리는 건설 시간이 최소값이다. 따라서 최대값을 갱신해서 저장하기 위해 DP를 사용한다. 점..
👉 문제링크 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 🔸 문제 분석 🔸 N x N 게임 판에서 2048을 수행한다. 5번 수행했을 때 최대값을 출력한다. 🔸 문제 풀이 🔸 2048게임 규칙에 따라 구현하면 되는 문제이다. 이동 방향에 따라 모든 칸의 숫자가 이동한다. 같은 숫자는 합쳐지고, 같은 회차에서 더이상 합쳐지지 않는다. 먼저 움직인 숫자가 먼저 합쳐진다. 최대값을 찾기위해 5회 게임 횟수의 모든 경우의 수를 확인한다. 풀이는 DFS로 탐색하였다. 🔸 코드 🔸 impo..
👉 문제링크 20040번: 사이클 게임 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 www.acmicpc.net 🔸 문제 분석 🔸 n개의 점들 사이에 m개의 선분을 그을 때, 사이클이 생기는 시점을 확인한다. 사이클이 처음 생긴 순서를 출력한다. 사이클이 생기지 않으면 0을 출력한다. 🔸 문제 풀이 🔸 분리 집합(Disjoint Set)을 이용해 사이클이 생기는 시점을 파악한다. 🔸 코드 🔸 import java.io.*; import java.util.StringTokenizer; public class Main { private static int[] ..
👉 문제링크 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 🔸 문제 분석 🔸 N개의 도시와 도시 사이를 연결하는 M개의 단방향 도로가 존재한다. 도로 하나 당 1의 거리를 갖는다. X번 도시에서 시작해 최단거리가 정확히 X 거리만큼 떨어진 도시의 목록을 출력한다. 🔸 문제 풀이 🔸 하나의 노드에서 다른 모든 노드들의 최단 거리를 구해야 하므로 다익스트라 알고리즘을 사용한다. N은30만개인데, 우선순위 큐를 활용해 O(NlogN)으로 해결..