코테준비 4

[알고리즘] 동적 계획법 (Dynamic Programming) + 메모이제이션(Memoization)

1. 소개동적 계획법은 해결하려는 문제를 작은 단위로 쪼개어 접근하는 방식이다. 사전 계산된 값을 여러 번 재활용할 때 효율적이다. 나무위키에 딱 와닿는 정의가 있어 아래에 추가한다.동적 계획법은 "어떤 문제를 풀기 위해 그 문제를 더 작은 문제의 연장선으로 생각하고, 과거에 구한 해를 활용하는" 방식의 알고리즘을 총칭한다. ( 출처: 나무위키 - 동적 계획법 ) 대표적인 예시로는 피보나치 수가 있다.피보나치 수는 동일한 부분 함수를 여러 번 호출하므로, 중간 결과를 저장해두면 전체 연산을 효율적으로 수행할 수 있는 대표적인 DP 문제이다. 피보나치 수의 정의부터 알아보자. 피보나치 수열은 첫 번째, 두 번째 항이 1이고 그 외의 모든 항은 이전 두 항의 합으로 구성된 수열이다. 즉, n번째 피보나치 ..

[백준][스택] 99클럽 코테 스터디 7일차 TIL + 쇠막대기

오늘의 학습 키워드스택, 문자열  오늘의 회고🌱 오늘의 문제https://www.acmicpc.net/problem/10799오직 소괄호만을 이용하여 쇠 막대기와 레이저의 위치를 나타낸 입력이 주어진다. 입력의 길이는 최대 10만이다.  🌱 나의 시도이 문제에서 중요한 포인트는 레이저가 한 번 등장할 때마다 현재 겹쳐져 있는 쇠 막대기의 개수만큼이 잘리게 된다는 것이다.조금 더 구체적으로 로직을 정리해 보면 아래와 같다. 1. 현재 들어온 입력에 대해 쇠 막대기인지 레이저인지 판단한다.2. 만약 쇠 막대기라면 현재 쇠 막대기 개수를 1 증가시킨다.3. 만약 레이저라면 현재 저장되어 있는 쇠 막대기 개수만큼 정답 값에 더해준다.4. 위 과정을 반복한 후 최종적으로 몇 개의 쇠 막대기가 잘렸는지 판단해준..

Daily/Coding Test 2025.04.11

[백준] 소수 구하기

문제 링크: https://www.acmicpc.net/problem/1929   오늘의 교훈: 입출력 범위를 잘 보자.... 소수 구하는 알고리즘은 처음 코딩 걸음마를 하던 시절부터 풀어왔다.그런데 오늘 문득 든 의문은 이것보다 더 효율적으로 푸는 방법은 없을지 궁금했다.우선 오늘 푼 방법 먼저 정리하고 효율적으로 풀 수 있는 방법이 있는지 추가로 찾아보자. 풀이import mathm, n = map(int, input().split())for x in range(m, n+1): isPrime = True if x != 1 else False for i in range(2, int(x**0.5)+1): if x % i == 0: isPrime = False if isPrim..

Daily/Coding Test 2025.03.31

[알고리즘] 단순 무식한 그리디(Greedy) 알고리즘

정의: 매 시점에 가장 좋은 선택지를 고르는 방식으로, 현재의 선택이 미래에 미칠 영향을 고려하지 않는 알고리즘이다.* 욕심쟁이 알고리즘 혹은 탐욕법이라고도 불린다.필요 역량: 창의력 / 문제를 풀기 위한 아이디어를 떠올릴 수 있는 능력특이 사항: 문제에서 기준이 제시될 가능성이 높으며 정렬 알고리즘과 함께 사용되는 경우가 많다.주의 사항: 그리디 알고리즘을 적용한 해법이 정당한지 검토하는 과정 필요 (반례 탐색 등)