본문 바로가기

다이나믹프로그래밍6

[C++][프로그래머스] 등굣길 :: seoftware 문제 설명 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = 4, n = 3 인 경우입니다. 가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다. 격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어집니다. 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해주세요. 제한사항 격자의 크기 m, n은 1 이상 100 이하인 자연수입니다. m과 n.. 2020. 4. 21.
[C++][프로그래머스] N으로 표현 :: seoftware 문제 설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 제한사항 N은 1 이상 9 이하입니다. number는 1 이상 32,000 이하입니다. 수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다. 최솟값이 8보다 크면 -1을 return 합니다. 접근 N의 최대 개수가 8개라는 점을 이용한다.. 2020. 4. 18.
[C++][DP][백준] 2×n 타일링 2 :: seoftware 문제 접근 2020/04/07 - [IT/코딩테스트] - [C++][백준] 11726번 2×n 타일링 :: seoftware [C++][백준] 11726번 2×n 타일링 :: seoftware 문제접근 다이나믹 프로그래밍, DP 가로의 길이가 n인 직사각형을 타일로 채우는 방법은 가로의 길이가 n-1인 직사각형을 타일로 채운 상태에서 2*1 타일을 1개 붙이는 방법과 가로의 길이가 n-2인 직사각형을 타.. seoftware.tistory.com 이전 문제랑 매우 유사하다. 둘 다 이전까지 구한 값을 바탕으로 관계식을 세워서 푸는 다이나믹프로그래밍 문제이다. 다만 다른 점은 이 전에는 n-2에서 n이 되는 경우가 한 가지, n-1에서 n이 되는 경우가 1가지 였는데, 이 문제에서는 n-2에서 n이 되는 .. 2020. 4. 7.
[C++][백준] 11726번 2×n 타일링 :: seoftware 문제접근 다이나믹 프로그래밍, DP 가로의 길이가 n인 직사각형을 타일로 채우는 방법은 가로의 길이가 n-1인 직사각형을 타일로 채운 상태에서 2*1 타일을 1개 붙이는 방법과 가로의 길이가 n-2인 직사각형을 타일로 채운 상태에서 1*2 타일을 2개 붙이는 방법이 있다. 따라서 가로의 길이가 n인 직사각형을 타일로 채우는 관계식은 다음과 같다. ( 가로의 길이가 n인 직사각형을 타일로 채우는 방법의 수 ) = ( 가로의 길이가 n-2인 직사각형을 타일로 채우는 방법의 수 ) + ( 가로의 길이가 n-1인 직사각형을 타일로 채우는 방법의 수 ) 소스코드 #include using namespace std; int dp[1001]; int main(void) { int N; cin >> N; dp[1] =.. 2020. 4. 7.
[C++][leetcode] Maximum Subarray :: seoftware 문제 접근방법 다이나믹 프로그래밍을 사용하려고 했는데 굳이 새로운 배열을 만들 필요는 없을것 같아서 max 값을 계속 업데이트 해주는 방식으로 접근! 소스코드 class Solution { public: int maxSubArray(vector& nums) { int max = 0; bool all_negative = true; for(int i = 0; i 0){ int tmp = 0; all_negative = false; for(int j = i; j max) max = tmp; } } } if(all_negative) { max = nums[0]; for(int i : nums){ if(max < i) max = i; } } return max; } }; 빨리 풀라고 시작이 양수인 것만 subar.. 2020. 4. 3.
[C++] 백준 11053번 가장 긴 증가하는 부분 수열 :: seoftware 문제 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. www.acmicpc.net 소스코드 #include using namespace std; int arr[1001]; int dp[1001]; int main(void) { //input int N; cin >> N; for (int i = 1; i > arr[i]; } //perform int answer = 0; for.. 2020. 3. 13.