치즈링크: https://www.acmicpc.net/problem/2638문제 해결 과정1. 문제를 읽고 이해하기문제 설명을 공격적으로 읽으며 문제가 원하는 바를 완전히 이해하는 것이 중요하다.사소한 제약 조건을 잘못 이해하면 풀 수 없는 문제들이 흔하다.골드 4의 치즈 문제(https://www.acmicpc.net/problem/2636)의 응용버전의 문제다.문제에서 고려해야할 요소는 다음과 같다.- 외부와 접촉해있어야 한다.- 2면이 닿아야 녹는다.- 가장자리는 치즈가 없다.2. 재정의와 추상화어느정도의 본질만 남겨두고 축약하여 다루기 쉽게 표현해야 한다.어떤 부분을 추상화할 지를 선택하는 작업과 문제를 재정의 하는 방법들에 대한 고찰을 해야한다.가장자리의 `0`과 접촉한 `1`인 면이 2개 이상..
Algorithms

동전링크: https://www.acmicpc.net/problem/9084문제 해결 과정1. 문제를 읽고 이해하기테스트 케이스의 개수 T (1 동전 종류의 수: N (1 만들어야 하는 금액: M (1 N가지의 동전을 가지고 M을 만들어야 한다. 만약 10원과 20원을 가지고 50원을 만드는 경우의 수는 3가지가 있다.1. 10 10 10 10 102. 10 10 10 203. 10 20 202. 재정의와 추상화N 개의 수를 사용하여 어떤 수 M를 만들 수 있는 경우의 수를 구해야 한다.3. 계획 세우기각 상황에 대한 모든 경우의 수를 나열하다보면 감을 잡을 수 있다. 10과 20으로 50을 만드는 경우의 수10원과 20원으로 50원을 만드는 경우의 수를 다시 확인해보자1. 10 10 10 10 102...

LCS최장 공통 부분 수열 알고리즘은, 여러 문자열의 부분 수열 중 가장 긴 수열을 찾는 알고리즘이다.여기서는 두 개의 수열에 대한 해만 다룰 것이다.diff 프로그램의 근간이되는 알고리즘이다.시간 복잡도주어진 수열의 개수가 일정할 때 DP(Dynamic Programming), 동적 계획법으로 풀이할 수 있다.길이가 N과 M인 두 수열이 주어졌을 때 일반적으로 O(N * M)의 시간복잡도를 가진다.LCS 문제의 풀이LCS는 *optimal substructure와 **overlapping subproblems 성격을 지니고 있다. 두 속성을 공유하는 경우 하위 부분 문제들에 대한 최적해를 저장한 메모이제이션 기법을 통한 DP풀이를 사용할 수 있다.*optimal substructure: 하위 문제의 최..

카드 구매하기링크: https://www.acmicpc.net/problem/11052 문제 해결 과정1. 문제를 읽고 이해하기N개의 카드 팩이 있고 입력값의 순서에 따라 i 장의 카드가 들어있다.N장의 카드를 얻기 위해 지불해야 하는 카드 값의 최댓값을 구하라. N이 4이고 1, 5, 6, 7이 각 카드 팩의 가격으로 주어졌다면 1장 팩 가격: 12장 팩 가격: 53장 팩 가격: 64장 팩 가격: 7 카드의 수가 4장이 되는 모든 경우의 수의 가격을 살펴보자. 편의상 N장의 카드가 담긴 팩을 팩N, 값단위를 $로 표기하겠다.팩1 * 4개 = 4$팩1 * 2개 + 팩2 = $7팩2 * 2 = $10팩3 + 팩1 = $7팩4 = $7 ∴ 4장을 구매하기 위한 최댓값은 2장 팩을 2개 구매하는 것이다.2. ..

극장 좌석링크: https://www.acmicpc.net/problem/2302 2024.10.23 - [Algorithms/알고리즘 문제 해결 전략] - [종만북] 알고리즘 문제를 해결하는 과정 [종만북] 알고리즘 문제를 해결하는 과정※ 구종만 저자님의 『알고리즘 문제 해결 전략』에서 발췌한 내용입니다.기본적인 문제 해결 과정1. 문제를 읽고 이해한다.2. 문제를 익숙한 용어로 재정의한다.3. 어떻게 해결할지 계획bitbit-merry-go-round.tistory.com회고의 방식을 위 포스팅의 내용을 반영하여 진행할 생각입니다😊문제 해결 과정1. 문제를 읽고 이해하기1. 1번 부터 N번까지 번호를 매긴 좌석이 있다.2. k번의 번호표를 가지고 있는 사람들은 k-1, k, k+1 세 좌석 중 한 ..

※ 구종만 저자님의 『알고리즘 문제 해결 전략』에서 발췌한 내용입니다.기본적인 문제 해결 과정1. 문제를 읽고 이해한다.2. 문제를 익숙한 용어로 재정의한다.3. 어떻게 해결할지 계획을 세운다.4. 계획을 검증한다.5. 프로그램으로 구현한다.6. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다. 1. 문제를 읽고 이해하기문제 설명을 공격적으로 읽으며 문제가 원하는 바를 완전히 이해하는 것이 중요하다.사소한 제약 조건을 잘못 이해하면 풀 수 없는 문제들이 흔하다. 2. 재정의와 추상화자신이 다루기 쉬운 개념을 이용하여 문제를 자신의 언어로 풀어쓰는 것.복잡한 문제일 수록 그 중요성이 커진다.문제의 추상화어느정도의 본질만 남겨두고 축약하여 다루기 쉽게 표현해야 한다.어떤 부분을 추상화할 지를 선택하..

택배링크: https://www.acmicpc.net/problem/8980 문제문제 접근각 마을에서 적재할 수 있는 박스의 최댓값을 구해야한다고 생각했다. 따라서 마을의 번호를 오름차순으로 정렬해서 풀이를 시도했다.문제는 현재의 최댓값이 전체의 최적해일 수 없다는 점이다.200의 용량을 가진 택배가 마을 1에서 7마을로 가는 200의 상자를 실어버리면 2마을과 4마을의 400을 놓치게 된다.현재 위치에서의 최적해를 판단하기 위해서는 잠재적으로 얻을 수 있는 값을 알고 있어야 한다.이 문제를 해결할 수 있는 방법을 생각해보자.최대 적재량이 200이기 때문에 2마을과 4마을에서 180을 싣더라도 20의 여유 공간이 생긴다.따라서 1마을에서 1마을에서 7마을까지의 여유 공간, 20을 구할 수 있어야 한다.이..

최솟값 찾기링크: https://www.acmicpc.net/problem/11003문제문제 접근문제의 흐름을 예제를 통해 살펴보자.가장 직관 적인 방식으로는 요소를 순서대로 주어진 길이만큼 보며 그때그때 정렬하여 최솟값을 구할 수 있다.시간 제한은 2.4초이고 수열의 크기와 길이는 5,000,000개 제한이다. N개의 범위에 대해서 정렬을하면 LlogL의 시간복잡도를 가질 것이므로, NLlogL의 최악의 경우는 N과 L이 각각 5백만일 경우 NL만 계산해도 25조 이다.어떻게든 시간복잡도를 줄일 수 있는 방법을 찾아야 한다. 자료구조를 적절히 사용하여 해당 구간의 최솟값을 구해야 한다.먼저 deque을 사용하는 문제라는 것을 이미 알고 있었기 때문에 front와 back에서 일어나는 연산을 통해 deq..