1. Brute force2. Divide and conquer3. Decrease and conquer4. Transform and conquer5. Greedy Method6. Dynamic Programming7. Backtracking8. Branch and Bound여기서는 Decrease and conquer에 대해 다룬다.Decrease and Conquer란주어진 문제를 같지만 계산을 작게 만들어서 해결하는 방식이다. 분할정복과의 차이는, 분할정복은 작게 쪼갠 후 다시 통합하는 과정이 있지만, Decrease는 작게 쪼개서 없애버린 부분을 다시 합치지 않는다는 차이가 있다. 그래서 여기서는 '통합' 대신 '확장'이라는 말을 쓴다. Greedy나 DP처럼 특정 알고리즘이라기보다는 정의역을 ..
algorithm
여기서는 8가지 알고리즘 중 Divide and conquer에 대해 다룬다. 1. Brute force 2. Divide and conquer 3. Decrease and conquer 4. Transform and conquer 5. Greedy Method 6. Dynamic Programming 7. Backtracking 8. Branch and Bound Divide and conquer란분할 정복이라 불리는 알고리즘이다. 주어진 문제의 입력을 분할하여 최소 단위로 나눈다. 그리고 이렇게 최소단위로 나눈 부분문제에 대한 부분해를 구하고, 이를 취합한다. 총 3가지 분할 -> 정복 -> 통합 3가지의 과정을 거치는 것이다. 이렇게 큰 문제를 작은 문제로 쪼개어 접근하는 방식을 하향식 top-do..
앞으로 예제와 함께 알고리즘 수업에서 배운 내용들을 요약하여 올릴 것이다.총 올릴 알고리즘 분류는 아래 8가지이다.1. Brute force 2. Divide and conquer 3. Decrease and conquer 4. Transform and conquer 5. Greedy Method 6. Dynamic Programming 7. Backtracking 8. Branch and Bound여기서는 Brute Force에 대해 다룬다.Brute Force란될 때까지 다 해본다는 알고리즘이다. 문제 해결을 위해 모든 경우의 수를 찾을 때까지 반복하는 방법이다. 실패하는 경우는 없으나 컴퓨팅 자원이 다른 알고리즘에 비해서 심각하게 낭비된다. 가장 단순하고 직관적이다. Brute Force 예시Sel..
https://www.acmicpc.net/problem/9657 9657번: 돌 게임 3 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net C++로 작성한 백준 문제 9657번 돌 게임 3에 대한 문제 풀이다. 실버 3 문제로 동적계획법이 문제를 푸는데 필요한 주요 지식이다. 문제 설명 문제 돌 게임은 두 명이서 즐기는 재밌는 게임이다. 탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개, 3개 또는 4개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다. 두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다. 입력 첫째 줄에 N이 주어진..
1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net C++로 작성한 백준 문제 1074번 Z에 대한 문제 풀이다. 분할정복 문제로 수학적 추론이 문제를 푸는데 필요한 주요 지식이다. 문제 설명 문제 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다. 다음 예는 22 × 2..
https://www.acmicpc.net/problem/2615 C++로 작성한 백준 문제 2615번 오목에 대한 문제 풀이다. 그리디 알고리즘 문제로 brute force가 문제를 푸는데 필요한 주요 지식이다. 문제 설명 문제 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호가 붙고 세로줄은 왼쪽에서부터 오른쪽으로 1번, 2번, ... 19번의 번호가 붙는다. 위의 그림에서와 같이 같은 색의 바둑알이 연속적으로 다섯 알을 놓이면 그 색이 이기게 된다. 여기서 연속적이란 가로, 세로 또는 대각선 방향 모두를 뜻한다. 즉, 위의 그림은 검은색이 이긴 경우이..
https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net C++로 작성한 백준 문제 7569번 토마토에 대한 문제 풀이다. 골드 5 문제로 그래프 이론, 그래프 탐색, 너비 우선 탐색이 문제를 푸는데 필요한 주요 지식이다. 문제 설명 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다. 창고에 ..
https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net C++로 작성한 백준 문제 7576번 토마토에 대한 문제 풀이다. 골드 5 문제로 그래프 이론, 그래프 탐색, 너비 우선 탐색이 문제를 푸는데 필요한 주요 지식이다. 문제 설명 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있..