바이토닉 수열: LIS와 LDS의 만남, 모든 경우를 탐구하다
BOJ 11054번 문제, '가장 긴 바이토닉 부분 수열'을 풀면서 겪었던 시행착오와 그 과정을 통해 얻은 학습 내용을 정리해보려고 합니다. 처음에는 바이토닉 수열의 정의를 곡해하여 문제 접근 방식 자체에 오류가 있었지만, 올바른 DP 구조를 이해하고 코드를 개선할 수 있었습니다.
백준 등 알고리즘 문제를 풀며 정리한 풀이와 개념입니다.
BOJ 11054번 문제, '가장 긴 바이토닉 부분 수열'을 풀면서 겪었던 시행착오와 그 과정을 통해 얻은 학습 내용을 정리해보려고 합니다. 처음에는 바이토닉 수열의 정의를 곡해하여 문제 접근 방식 자체에 오류가 있었지만, 올바른 DP 구조를 이해하고 코드를 개선할 수 있었습니다.
2565번 "교차 최소화를 위한 선 제거 알고리즘"을 해결하며 동적 계획법(DP)과 최장 증가 부분수열(LIS)의 연관성을 깊이 이해하는 시간을 가졌습니다. 처음에는 직관적인 탐욕적 접근으로 시작했지만, 문제의 본질을 파고들수록 DP와 LIS가 정답으로 향하는 길임을 깨닫게 되었습니다.
Gold_IV 난이도 문제를 C++로 풀이한 내용입니다. 수열을 증가하다가 감소하는 형태의 가장 긴 부분 수열의 길이를 찾는 문제입니다.
Silver II 난이도 문제를 C++로 풀이한 내용입니다. 주어진 수열에서 가장 긴 증가하는 부분 수열의 길이를 구하는 동적 계획법 문제입니다.
Silver I 난이도의 동적 프로그래밍 문제를 C++로 풀이한 내용입니다. n개의 포도주 잔이 일렬로 놓여있을 때, 연속 3잔을 마시지 않는 제약 조건 하에서 최대한 많은 포도주를 마시는 문제입니다.
Silver_I 난이도 문제를 C++로 풀이한 내용입니다. 정수 삼각형의 최상단에서부터 시작하여 아래로 내려오면서 각 숫자를 하나씩 선택하여 합이 최대가 되는 경로를 찾는 동적 계획법(Dynamic Programming) 문제입니다.
LIS, '최장 증가 부분 수열' 알고리즘에 대해 이해하는 시간을 가졌습니다. 처음에는 그저 '중간을 건너뛰는 증가 수열' 정도로만 막연하게 생각했지만, 코드를 깊이 파고들면서 LIS가 왜 일반적인 DP와 다른지, 그리고 제 코드와는 어떤 구조적인 차이가 있는지를 명확하게...
오늘은 백준 2156번 '포도주 시식' 문제를 풀면서 다이나믹 프로그래밍(DP)의 핵심을 다시 한번 깊이 깨닫는 시간을 가졌습니다. 처음에는 문제의 제약 조건을 그대로 옮기려 복잡한 모델링을 시도했지만, '시간'이라는 관점으로 문제를 재해석하는 순간 모든 것이 명확해졌습니다.
풀이가 틀리고, 처음에는 단순한 코딩 오류라고 생각했던 것이, 사실은 문제 해석 자체에 있었다는 것을 깨닫는 과정이었습니다. DP의 원리와 함께, 흔히 겪는 함정을 어떻게 극복할 수 있는지 공...
Silver III 난이도 문제를 C++로 풀이한 내용입니다. 계단을 오를 때 얻는 점수의 최댓값을 찾는 동적 계획법(Dynamic Programming) 문제입니다.
Silver II 난이도의 이 문제는 동적 계획법(Dynamic Programming)을 이용하여 주어진 정수 배열에서 연속된 부분 배열의 합 중 최댓값을 찾는 문제입니다. C++ 언어를 사용하여 4ms의 실행 시간과 2804KB의 메모리로 해결되었습니다.
Silver III 난이도의 파도반 수열 문제를 C++로 풀이한 내용입니다. 동적 계획법(Dynamic Programming)을 사용하여 주어진 점화식을 효율적으로 계산하는 방법을 설명합니다.
Silver III 난이도 문제를 C++로 풀이한 내용입니다. 길이가 N인 이진 문자열을 만드는 경우의 수를 구하는 문제입니다.
1904번 문제, "01 타일"을 풀면서 DP 경험을 늘렸습니다. 처음에는 수학적인 조합론으로 접근하려 했지만, 문제의 출제 의도대로 DP로 전환하는 과정에서 많은 것을 배웠습니다. 학습한 내용을 공유하며, 이 문제가 왜 DP로 풀리는지...
Silver II 난이도 문제를 C++로 풀이한 내용입니다. 재귀 함수 w(a,b,c)를 동적 계획법(DP)으로 효율적으로 계산하는 문제입니다.
Silver III 난이도 문제를 C++로 풀이한 내용입니다. 정수 N이 주어졌을 때, 연산을 최소 횟수로 사용하여 1로 만드는 문제입니다.