[백준 12865번] - 평범한 배낭(C/C++)
2022. 9. 3. 23:38
Problem Solving/백준
12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net [문제 설명] [문제 풀이] 다이나믹 프로그래밍 문제 중 유명한 유형인 Knapsack Problem(배낭 문제)이다. 물건들은 각각 무게(W)와 가치(V)를 가지고 있다. 배낭에 넣을수 있는 무게의 한계(K)가 정해져있고, 무게 한도 안에서 넣을수있는 물건들(N)의 가치합의 최댓값을 구하면 된다. 물건들을 처음부터 차례로 확인한다. 2차원 배열 dp를 선언하여 dp[물건 인덱스][무게]의 가치의 ..
[Algorithm] - LIS(Longest Increasing Subsequence)
2022. 8. 19. 13:45
Problem Solving/Algorithm
Algorithm - LIS(Longest Increasing Subsequence) 코딩테스트 문제를 풀다보면 자주 마주치는 문제 알고리즘 유형에 대해 정리해보려고 한다. 첫번째로 정리할 내용은 **LIS(Longest Increasing Subsequence)**이다. LIS(최장 증가 부분 수열) 문제는 동적 계획법으로 풀 수 있는 유명한 알고리즘 문제이다. LIS 란 LIS라는것은 한국말로 번역하면 최장 증가 부분수열이라고 할 수 있다. 말로만 하면 제대로 이해가 안될 수 있다. 예를 들어 설명하도록 하겠다. 아래와 같이 임의의 수열이 주어졌다고 하자. 위 수열에서 숫자 몇 개를 제거해서 아래와 같이 부분 수열을 만들 수 있다. 2 6 8 3 3 4 5 1 2 3 4 5 등등.. 위와 같은 수열들..
[백준 9095] - 1, 2, 3 더하기(C++)
2022. 8. 14. 23:19
Problem Solving/백준
9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net [문제 설명] 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 예제 입력 1 복사..
[백준 11726번] - 2xn 타일링(C++)
2022. 8. 10. 18:16
Problem Solving/백준
11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net [문제 설명] 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1 2 예제 출력 1 2 예제 입력 2 9 예제 출력 2 55 [문제 풀이] 다이나믹 프로그래밍에 대한 감을 잡기에 좋은 문제같다. 다른..
[백준 1463번] - 1로 만들기
2022. 7. 30. 16:53
Problem Solving/백준
1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net [문제 설명] 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.15 초 (하단 참고) 128 MB 209950 68556 43766 32.177% 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟..