코딩테스트 준비하기/알고리즘 개념과 관련 문제 7

LIS(최장 증가 수열 ) - 백준 11053 (JAVA)

서론 최장 수열은 주어진 수열에서 오름차순으로 정렬된 가장 긴 부분수열을 찾는 문제이다. 일반적으로 길이를 저장하는 테이블을 만들어 해결한다. 이럴경우 이중반복문을 사용하기에 시간복잡도는 O(N^2)이 된다. 또 다른 방법은 Binary search를 이용하여 O(NlogN)의 시간복잡도를 갖는 방법도 있다. 구현 코드 memo[0] = 1; for (int i = 1; i arr[j] && memo[i]

플로이드 워셜 백준 11404 (JAVA)

서론 Floyd Warshall 알고리즘은 최단 경로를 구하는 방법중 하나이다. 동적계획법으로 접근하는데 시간 복잡도는 O(N^3)이다. 최단경로 구하는 알고리즘인 dijkstra와 비교하자면 간선 수가 많으면 Floyd 가 빠를 수 있다. 시작 정점이 정해져 있으면 dijkstra가 당연히 빠르다. 음의 가중치가 존재한다면 dijkstra는 사용할 수 없지면 Floyd는 사용가능하다. 구현 코드 for i in vertex // 경유 for j in vertex //시작점 if i == j continue for k in vertex //도착점 if i == j or j==k continue arr[j][k] = min(arr[j][i] + arr[i][k] , arr[j][k]) 문제에 적용 문제 :..

백준 2839번 설탕배달 (JAVA)

문제 : https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 www.acmicpc.net 문제설명 단순 로직, 메모이제이션, 완전탐색 등 푸는 방법은 여러가지이다. 단순 로직은 빠르지만 문제가 달라지면 또 다른 로직..

DFS - 요리사

서론 DFS는 가장 많이 쓰이는 알고리즘이다. 아마 대부분의 문제들은 DFS와 BFS 알고리즘으로 해결되기 때문에 꼭 알아야 한다. DFS는 Stack 또는 재귀로 구현할 수 있는데 재귀로 구현하는 것이 직관적이고 가독성도 좋다. DFS를 구현하기 전에 문제에서 원하는 조건을 꼭 알아야 한다. 중복이 되는지, 순서대로 하는 건지 등등.. 조건에 따라서 방문했던 곳을 제 할 수 돼있고, 포함시킬 수 도있다. 그러므로 꼭 문제의 조건을 확인해야 한다. 만약 DFS가 구현하기 어렵다면 기본적인 틀을 외우고 문제를 풀어가며 이해한다. 구현 코드 1. 중복 가능 순열(1~2중에 3개 선택 중복가능) public class PermutationNPIN { static int n; //순열의 자리수 static in..

Priority Queue(우선순위 큐) & 객체 비교 - 보급로

서론 우선순위 큐는 알고리즘 풀 때 자주 쓰이는 자료구조 중 하나이다. 우선순위 큐의 장점은 offer를 하면 큐 내에서 Sort를 해준다. Sort의 기준은 defalut가 값 하나에 대한 오름차순이다. 그러나 대부분 문제들이 우선순위 큐에 객체로 들어가기 때문에 CompareTo를 Overriding 하여 Sort의 기준을 잡아준다. 구현 코드 ///////////////////////객체 생성 후 CompareTo 재정의/////////////////////// class road implements Comparable{ int y; int x; int value; public road(int y, int x, int value) { super(); this.y = y; this.x = x; thi..

메모이제이션 - 초콜릿과 건포도

서론 메모이제이션은 DP에서 많이 쓰이는 기법이다. 간단히 설명하면 문제를 계산하여 답을 저장하고, 이후에 겹치는 문제에 대해 계산을 하지 않고 저장된 답을 이용하는 것이다. 이는 영상처리 기법 중 하나인 LUT(Lookup Table)과 비슷하다. 이런 식으로 하면 빠른 실행 속도를 얻을 수 있지만 메모리 공간을 잃는다. 문제에 적용 문제:https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW9j-qfacIEDFAUY&categoryId=AW9j-qfacIEDFAUY&categoryType=CODE&&& SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swe..

객체 비교 후 정렬 - 냉장고

서론 일반적으로 정렬을 할 때 sort함수를 이용하여 정렬을 한다. 그러나 객체에 대해서 sort를 하려면 일반적인 sort함수로는 불가능하다. 객체를 sort 하려면 객체의 속성 중 하나를 기준으로 잡고 sort를 해야한다. 객체를 sort 하기 위해서는 compare함수의 Override이 필요하다. 구현 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.StringTokenizer; class Poin..

728x90