본문 바로가기

728x90

DP

[백준알고리즘] 2839번: 설탕 배달 -Python, C++ [백준알고리즘] 2839번: 설탕 배달 -Python, C++ https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 www.acmicpc.net 설탕 n만큼을 최소의 묶음을 챙겨서 가져갈 수 있는 방법은 최대한 5의 .. 더보기
[백준알고리즘] 2186번: 문자판 -Python [백준알고리즘] 2186번: 문자판 -Python https://www.acmicpc.net/problem/2186 2186번: 문자판 첫째 줄에 N(1 ≤ N ≤ 100), M(1 ≤ M ≤ 100), K(1 ≤ K ≤ 5)가 주어진다. 다음 N개의 줄에는 M개의 알파벳 대문자가 주어지는데, 이는 N×M 크기의 문자판을 나타낸다. 다음 줄에는 1자 이상 80자 이하의 영단어가 주어진다. 모든 문자들은 알파벳 대문자이며, 공백 없이 주어진다. www.acmicpc.net 일단 파이썬보다는 PyPy로 통과할 확률이 높다. 이번 문제에서도 BFS 혹은 DFS를 통해서 주어진 문자열을 모두 완성할 수 있는 경우의 수를 구해주면 된다고 생각했다. 처음에는 이전에 몇 번 풀었던 것처럼 방문 여부를 확인하는 vis.. 더보기
[백준알고리즘] 11728번: 배열 합치기 -Python [백준알고리즘] 11728번: 배열 합치기 -Python https://www.acmicpc.net/problem/11728 11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다. www.acmicpc.net 그냥 서로 다른 두 배열을 정렬된 상태로 출력하는 문제이다. 아래처럼도 풀어봤고, 각각 정렬된 두 배열에서 작은 값부터 하나씩 비교해서 결과를 출력하는 코드도 작성했으나 아래의 코드가 조금 더 빨랐고 간단해 보여서 그냥 잔뜩 파이썬스러운 코드만 올렸다. 1 2 3 4 5 6 import .. 더보기
[백준알고리즘] 11052번: 카드 구매하기 -Python [백준알고리즘] 11052번: 카드 구매하기 -Python https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 반드시 N개를 구매하면서 가장 비싸게 주고 사는 경우를 구해야 한다. 입력받은 값으로부터 누적해 나가면서 i개를 살 때 가장 비싸게 주는 값을 구해나갔다. 최종적으로 N개를 구매할 때 가장 비싸게 사는 방법을 계산했다. 각 인덱스 마다 값을 구하기 위해서 다음과 같이 생각했다. 1개를 살 때: 0 + 1 2개를 살 때: 0 + 2 1 + 1 3개.. 더보기
[백준알고리즘] 2011번: 암호코드 -Python [백준알고리즘] 2011번: 암호코드 -Python https://www.acmicpc.net/problem/2011 1 101010 ->1 처음에 푼 코드에서 몇 자리 이어지냐에 따라서 cnt를 세는데 cnt[i] = cnt[i-1] + cnt[i-2]를 구하기 위해서 길이가 3인 리스트를 이용했다. import sys mod = 1000000 N = [0] N += list(map(int, list(sys.stdin.readline().strip()))) cnt = [1, 1, 1] res = 1 for idx in range(1, len(N)): if N[idx] == 0 and N[idx-1] != 1 and N[idx-1] != 2: res = 0 break elif N[idx] == 0: re.. 더보기
[백준알고리즘] 2225번: 합분해 -Python [백준알고리즘] 2225번: 합분해 -Python https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 이번 문제는 조금 오래 걸렸다. 한시간이 안되게 걸리긴 했지만 그래도 DP인 것을 알고 풀어서 그나마 나았지.. 몰랐으면 고생을 조금 더 했을 것 같다. 풀이를 적었는데 앞부분은 너무 두서없는 것도 같고 뒤에 갈수록 이해는 될 것 같기도 하고.. 이번 문제는 0부터 N까지 K개의 수를 더해서 N을 만드는 문제이다. 여기서 중요한 것은 강조한 것처럼 "0부터"라는 것이다. 예시에서 주어진 문제를 살펴보면 쉽게 이해할 수 있다. 예제 입력으로 20 2 가 주어졌는데, 2개의 수.. 더보기
[백준알고리즘] 9461번: 파도반 수열 -Python [백준알고리즘] 9461번: 파도반 수열 -Python https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다. N이 주어졌을 때, P(N)을 구하 www.acmicpc.net 초기에 5번째 삼각형까지는 길이를 직접 넣어주었다. 그리고 그림에서의 규칙을 .. 더보기
[백준알고리즘] 2133번: 타일 채우기 -Python [백준알고리즘] 2133번: 타일 채우기 -Python https://www.acmicpc.net/problem/2133 2133번: 타일 채우기 문제 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력 첫째 줄에 경우의 수를 출력한다. 예제 입력 1 복사 2 예제 출력 1 복사 3 힌트 아래 그림은 3×12 벽을 타일로 채운 예시이다.... www.acmicpc.net 이번 문제는 집중력이 부족하기도 했고 어렵기도 했다. ㅠㅠㅠㅠㅠ 다 풀고 보니까 너무 간단해보이는데... 우선은 짝수일 때만 채울 수 있다. 홀수에서는 채울 수 있는 방법이 없고, 무조건 0을 출력하게 된다. 그리고 2칸일 때는 3가지의 경우가 존재한.. 더보기

728x90