본문 바로가기

백준 문제 풀이

(4)
2021.06.02 problem solving 오늘 하루만에 다이아 1, 다이아 3, 다이아 5, 플래 3을 한 문제씩 풀어서 기분이 매우 좋다. BOJ 18510 : Program (solved.ac 난이도 : P3) 더보기 2번 명령이 나온 개수의 prefix sum을 저장하며 i번 명령의 마지막 위치, i번 쿼리의 dp값 세 개를 저장하면 문제를 풀 수 있다. i번째 명령이 1번이라면 p의 마지막 위치와 p의 dp값을 모두 i로 바꾼다. i번째 명령이 2번이라면 지금까지 p였을 때 없애야 할 개수와 지금까지 q였을 때 없애야 할 개수를 비교한 다음 둘 중 작은 걸 선택하면 된다. 그 후 마지막으로 dp값들과 마지막 위치와 2번 명령이 나온 개수의 prefix sum과의 관계를 잘 생각하며 식 계산을 하면 풀린다. Time Complexity :..
2021년 1월 백준 기록(플래 이상 주요 문제) 보호되어 있는 글입니다.
오늘의 문제 2일차 ~ 6일차 풀이 6일차 (장미) : 실버 I $a \times c$개의 장미를 살 때는, $\frac{b}{a}, \frac{d}{c}$ 중 작은 쪽의 장미를 사는 것이 무조건 이득입니다. 따라서, 장미 한 개당 가격이 높은 장미를 $a \times c$개 이상 사지 않습니다. 따라서 $\frac{b}{a} > \frac{d}{c}$라면 a의 한 개당 가격이 더 비싸니까, a개 짜리를 0묶음, 1묶음, ..., c-1묶음 사는 경우를 고려해주면 됩니다. 시간복잡도 : $\frac{b}{a} > \frac{d}{c}$이면 $O(c)$, $\frac{b}{a} j인 모든 (i, j)에 대해, dp[i][j]를 구해줍니다. 이분탐색으로 수열의 i번째 항 - j번째 항 = j번째 항 - m번째 항인 m을 찾으면, dp[i][j..
(BOJ 17372) 피보나치 수의 최대공약수의 합 https://www.acmicpc.net/problem/17372 17372번: 피보나치 수의 최대공약수의 합 첫 번째 줄에 구하는 합을 1,000,000,007로 나눈 나머지를 출력합니다. www.acmicpc.net 모바일 환경일 경우 수식이 깨질 수 있습니다. 수열 F가 $F_{1} = 1, F_{2} = 1, F_{n+1} = F_{n} + F_{n-1}$를 만족할 때, $\sum_{i=1}^{n}{\sum_{j=1}^{n}{gcd(F_{i}, F_{j})}}$ 를 구하는 문제입니다. 배경지식 gcd(a, b) : a, b의 최대공약수로, 자연수 a와 b를 모두 나누는 가장 큰 자연수입니다. $I$ : 자연수 n에 대해 f(n) = 1을 만족하는 함수입니다. $Id$ : 자연수 n에 대해 f(n..