목록전체 글 (54)
후라이
https://www.acmicpc.net/problem/11049 해당 문제는 이전에 풀이했던 동적계획법 문제와 유사하되, 행렬 곱셈의 최솟값을 찾는 문제이다.이 문제는 행렬 곱셈의 최소 연산 횟수를 구하기 위해 DP를 사용해야 한다. 머릿속에서 개념이 정확히 안 잡힌 탓인지 DP는 볼 때마다 헷갈리고 모르겠다...나만 그러나..나만 그러겠지 문제 분석 1. 주어진 행렬들은 순서를 바꿀 수 없기 때문에, 순서를 유지하되 곱하는 방식만 고려해야 한다.2. DP 배열을 정의하여 최소 연산 횟수를 계산해 나간다. DP 접근 방식(1) DP 배열 정의 : dp[i][j]는 i번째 행렬부터 j번째 행렬까지 곱하는 최소 연산 횟수를 저장한다.(2) 구간 나누기 : 이 문제의 핵심은 구간을 어떻게 나누느냐이다. ..
https://www.acmicpc.net/problem/11066 해당 문제는 백준 "동적계획법2" 단계의 문제이다.DP 알고리즘 이해를 위해 간략한 설명과 함께 문제를 풀이해보겠다. 1. 동적 계획법(Dynamic Programming, DP): 큰 문제를 작은 하위 문제로 나누어 각 문제의 결과를 저장하고, 재사용해 효율적으로 해결하는 알고리즘 기법이다.DP를 사용하면 중복 계산을 피할 수 있어 반복적인 구조가 있는 문제를 더 빠르게 풀 수 있다. 문제의 핵심파일을 합치려면 인접한 두 파일을 하나로 합쳐야 하고, 이때 두 파일 크기의 합이 비용이 된다.이렇게 파일을 하나로 합칠 때 최소 비용을 구하려면 파일을 합치는 순서를 잘 정해야 할 것이다.예를 들어, 작은 파일들끼리 먼저 합치는 것이 비용을 ..
https://www.acmicpc.net/problem/11286 위 문제는 "우선순위 큐" 알고리즘으로 힙 자료구조를 구현한다.우선순위 큐 문제의 최대힙, 최소힙을 풀이하였다면 이 문제도 어렵지 않게 해결할 수 있을 것이다.(근데 난 바보같이 해결했었음) Java에서는 PriorityQueue, 즉 우선순위 큐 클래스를 지원하기 때문에 이를 사용하겠다.java.util 패키지 내의 우선순위 큐는 내부적으로 최소 힙(min-heap)을 사용해 자동으로 "오름차순" 정렬된다.그래서 최대힙의 경우 우선순위 큐를 선언하면서PriorityQueue q = new PriorityQueue; 위와 같이 reverse 정렬을 위한 컬렉션을 사용해서 초기화하면 됐었다. 해당 문제에서는 "절댓값 비교"이다. 즉, P..
https://www.acmicpc.net/problem/12015 이분 탐색의 핵심은 *배열을 반씩 쪼개가며 찾기*이다.그래서 배열 내에 특정 타겟값이 들어올 때, 왼쪽과 오른쪽은 이 타겟이 들어갈 위치를 찾기 위한 탐색 범위를 의미한다.public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 수열의 크기 입력 int N = Integer.parseInt(br.readLine()); int[] arr = new int[N]; // 수열 ..