본문 바로가기

백준134

[BAEKJOON]2748 피보나치 수 2 문제 요약알고리즘 분류: dp난이도:  Bronze1문제내용:피보나치 수는 0과 1로 시작한다. 피보나치 식은 아래와 같다.Fn = Fn-1 + Fn-2 N이 주어 졌을때 피보나치 Fn을 구하여라 (N 사이트: https://www.acmicpc.net/problem/2748문제풀이이번 문제는 재귀 호출로 풀기에는 숫자가 커질수록 계산량이 급격히 증가하기 때문에, 동적 계획법(Dynamic Programming, DP*을 사용해야 효율적으로 해결할 수 있다. 동적 계획법에 대해 잘 모르신다면, 아래 링크를 통해 자세한 설명을 확인 해보면 된다.https://jih3508.tistory.com/89 [알고리즘 이론] 동적계획법(Dynamic Programming, DP)이론 이번에 볼 알고리즘은 동적계획법.. 2025. 1. 14.
[BAEKJOON]1965 상자넣기 문제 요약알고리즘 분류: dp, LIS난이도:  Silver2문제내용:상자가 일렬로 있다. 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 있다.. 예를 들어 앞에서부터 순서대로 크기가 (1, 5, 2, 3, 7)인 5개의 상자가 있다면, 크기 1인 상자를 크기 5인 상자에 넣고, 다시 이 상자를 크기 7인 상자 안에 넣을 수 있다.앞의 예에서 차례대로 크기가 1, 2, 3, 7인 상자를 선택하면 총 4개의 상자가 한 개의 상자에 들어가게 된다.상자의 크기가 주어질 때, 한 번에 넣을 수 있는 최대의 상자 개수를 출력하는 프로그램을 작성하시오.사이트: https://www.acmicpc.net/problem/1965문제풀이 이번 문제에는 모든.. 2024. 11. 27.
[BAEKJOON]11055 가장 큰 증가하는 부분 수열 문제 요약알고리즘 분류: dp, LIS난이도:  Silver2문제내용:수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는 부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113이다.사이트: https://www.acmicpc.net/problem/11055문제풀이 이번 문제에는 모든 경우의 수를 구해서 풀기가 힘들다. 모든 경우의 수를 구하 O(N^N)개 이상으로 나올수 있다. 그래서 이번 문제는 LIS 개념을 적용해서 풀어야 한다. LIS에 대한 개념은 아래 글에서 확인 해보면된.. 2024. 11. 24.
[BAEKJOON]11722 가장 긴 감소하는 부분 수열 문제 요약알고리즘 분류: dp, LIS난이도:  Silver2문제내용:수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10}  이고, 길이는 3이다.사이트: https://www.acmicpc.net/problem/11722문제풀이 이번 문제에는 모든 경우의 수를 구해서 풀기가 힘들다. 모든 경우의 수를 구하 O(N^N)개 이상으로 나올수 있다. 그래서 이번 문제는 LIS 개념을 적용해서 풀어야 한다. LIS에 대한 개념은 아래 글에서 확인 해보면된다.https://jih3508.tistory.com/46 [알고리즘.. 2024. 11. 24.
[BAEKJOON]7569 토마토 문제 요약알고리즘 분류: BFS, 그래프난이도: Gold5문제내용:문제풀이 CodePythonimport sysfrom collections import dequeinput = sys.stdin.readlinedef solution(boxs, location): dx = [0, -1, 0, 1] dy = [-1, 0, 1, 0] dz = [-1, 1] days = 0 queue = location while queue: z, y, x = queue.popleft() value = boxs[z][y][x] for i in range(4): fx = x + dx[i] fy = y + dy[i].. 2024. 11. 9.
[BAEKJOON] 2805 나무 자르기 문제 요약알고리즘 분류: 이진 탐색, 수학난이도: Silver3문제내용: 사이트: https://www.acmicpc.net/problem/2805문제풀이 CodePythonn, m = map(int, input().split())trees = list(map(int, input().split()))min_value = 1max_value = max(trees)while min_value mid]) if m > lenth: max_value = mid - 1 else: min_value = mid + 1print(max_value)Javaimport java.io.BufferedReader;import java.io.IOException;import java.io... 2024. 11. 2.