본문 바로가기

코딩테스트12

동적 계획법 (Dynamic Programming) Dynamic Programming 이라는 말은 최적화 문제를 연구하는 수학 이론에서 왔으며, 전산학에서 일반적으로 사용하는 동적(dynamic), 혹은 프로그래밍(programming) 이란 단어와는 무관합니다. 따라서 Dynamic Programming의 적절한 번역은 동적 프로그래밍이 아니라 동적 계획법 입니다. 동적 계획법 알고리즘의 구현 단계 1. 주어진 문제를 완전 탐색을 이용해 해결합니다. (재귀함수호출) 2. 중복된 부분 문제를 한 번만 계산하도록 메모이제이션을 적용합니다. (캐싱) 메모이제이션 이란? - 한 번 계산한 값을 저장해 뒀다 재활용하는 최적화 기법입니다. - 참조적 투명 함수(referential transparent function)의 경우에만 적용할 수 있습니다. 참조적 투.. 2023. 8. 9.
쿼드 트리 압축하기 문제 : https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 입력 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또는 1의 숫자로 이루어져 있으며, 영상의 각 점들을 나타낸다. 출력 영상을 압축한 결과를 출력한다. 예제 입력 1 복사 8 11110000 11110000 00011.. 2023. 8. 7.
울타리 잘라내기 (문제 ID: FENCE, 난이도: 중) 문제 : https://algospot.com/judge/problem/read/FENCE algospot.com :: FENCE 울타리 잘라내기 문제 정보 문제 너비가 같은 N개의 나무 판자를 붙여 세운 울타리가 있습니다. 시간이 지남에 따라 판자들이 부러지거나 망가져 높이가 다 달라진 관계로 울타리를 통째로 교체 algospot.com 예제 입력 3 7 7 1 5 9 6 7 3 7 1 4 4 4 4 1 1 4 1 8 2 2 예제 출력 20 16 8 public static void main(String[] args) { int fenceCount = 7; int[] fenceHeight = {7, 1, 5, 9, 6, 7, 3}; System.out.println(getMaxRectangle(fenc.. 2023. 8. 4.
쿼드 트리 뒤집기 (문제 ID: QUADTREE, 난이도: 하) 문제 참고 : https://algospot.com/judge/problem/read/QUADTREE algospot.com :: QUADTREE 쿼드 트리 뒤집기 문제 정보 문제 대량의 좌표 데이터를 메모리 안에 압축해 저장하기 위해 사용하는 여러 기법 중 쿼드 트리(quad tree)란 것이 있습니다. 주어진 공간을 항상 4개로 분할해 재귀적 algospot.com 예제 입력 4 w xbwwb xbwxwbbwb xxwwwbxwxwbbbwwxxxwwbbbwwwwbb 예제 출력 w xwbbw xxbwwbbbw xxwbxwwxbbwwbwbxwbwwxwwwxbbwb public static void main(String[] args) { System.out.println(solution("xbwwb")); .. 2023. 8. 3.
Quick sort public static void main(String[] args) { int[] src = new int[]{1, 9, 8, 5, 4, 2, 3, 7, 6}; printArray(src); midPivotSort(src, 0, src.length-1); printArray(src); } private static void midPivotSort(int[] src, int start, int end) { if(start >= end) return; int part = partition(src, start, end); if(start < part-1) midPivotSort(src, start, part-1); if(part < end) midPivotSort(src, part, end); } priva.. 2023. 8. 1.
Merge sort 출처 : https://en.wikipedia.org/wiki/Merge_sort public static void main(String[] args) { int[] src = new int[]{1, 9, 8, 5, 4, 2, 3, 7, 6}; int[] tmp = new int[src.length]; printArray(src); mergeSort(src, tmp, 0, src.length-1); printArray(src); } private static void mergeSort(int[] src, int[] tmp, int start, int end) { if(start < end) { int mid = (start + end) / 2; mergeSort(src, tmp, start, mid); .. 2023. 8. 1.