알고리즘 3

[알고리즘] 다이나믹 프로그래밍

다이나믹 프로그래밍 (Dynamic Programming) 큰 문제를 작은 문제로 나눠서 푸는 알고리즘 기법 1. Overlapping Subproblem - 큰 문제와 작은 문제를 같은 방법으로 풀 수 있다. - 문제를 작은 문제로 쪼갤 수 있다. 2. Optimal Substructure - 문제의 정답을 작은 문제의 정답에서 구할 수 있다. - 문제의 정답을 작은 문제의 정답을 합하는 것으로 구할 수 있다. • 다이나믹 프로그래밍에서 각 문제는 한 번만 풀어야 한다. • Optimal Substructure를 만족하기 때문에, 같은 문제는 구할 때 마다 정답이 같다. • 따라서, 정답을 한 번 구했으면, 정답을 어딘가에 메모해놓는다. • 이런 메모하는 것을 코드의 구현에서는 배열에 저장하는 것으로 ..

알고리즘 2020.09.24

[알고리즘] 2. 큐 와 덱

Queue 란? • 한쪽 끝에서만 자료를 넣고 다른 한쪽 끝에서만 뺄 수 있는 자료구조 • 먼저 넣은 것이 가장 먼저 나오기 때문에 First In Frist Out (FIFO) 라고도 한다. • push : 큐에 자료를 넣는 연산 • pop : 큐에서 자료를 빼는 연산 • front : 큐의 가장 앞에 있는 자료를 보는 연산 • back : 큐의 가장 뒤에 있는 자료를 보는 연산 • empty : 큐가 비어 있는지 아닌지를 알아보는 연산 • size : 큐에 저장되어 있는 자료의 개수를 알아보는 연산 1. 요세푸스 문제 (1158번) import java.util.Queue; import java.util.Scanner; import java.util.StringTokenizer; import java..

알고리즘 2020.09.19

[알고리즘] 1. 스택

Stack이란, • 한쪽끝에서만자료를넣고뺄수있는자료구조 • 마지막으로넣은것이가장먼저나오기때문에 Last In Frist Out(LIFO)라고도한다. • push : 스택에 자료를 넣는 연산 • pop : 스택에서 자료를 빼는 연산 • top : 스택의 가장 위에 있는 자료를 보는 연산 • empty : 스택이 비어있는지 아닌지를 알아보는 연산 • size : 스택에 저장되어있는 자료의 개수를 알아보는 연산 Stack을 이용하여 풀기 좋은 문제들, - 단어 뒤집기 - 괄호 VPS(Valid Parenthesis String) 확인 - 수열 (어떤 규칙에 따라 차례로 나열된 수의 열) - 에디터 (커서이동) 1. 단어 뒤집기 예제 (9093번) import java.util.*; import java.io...

알고리즘 2020.06.26