본문 바로가기

전체 글

(2329)
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 11057번:오르막 수 답 //D[i][j] = 길이 i인 배열의 마지막에 들어갈 j//D[i][j] += D[i-1][k](0 N; for (int i = 0; i
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 9461번:파도반 수열 답 //P[N] = P[N-1] + P[N-5]1234567891011121314151617#include #include using namespace std;long long P[101] = { 0,1,1,1,2,2, };int main() { long long T,N; cin >> T; for (int i = 6; i N; cout
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 11048번:이동하기 답 //이동할때 오른쪽, 아래쪽, 오른쪽 아래 대각선 3가지 방법으로 이동할 수 있다.//(i,j)로 이동할 때 최대값을 D[i][j]라 하면//D[i][j] = max(D[i-1][j],D[i][j-1],D[i-1][j-1])+A[i][j]12345678910111213141516#include #include using namespace std;int D[1001][1001], A[1001][1001];int main() { int N, M; cin >> N >> M; for (int i = 1; i A[i][j]; for (int i = 1; i
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 2156번:포도주 시식 답 #include #include using namespace std;//A[i] = 입력//D[i] = i번쨰 포도주를 마셨을 때 최대// i번째 포도주를 고르지 않았을 때:D[i-1]//1번 연속으로 마셨을 때:D[i-2] + A[i]//2번 연속으로 마셨을 때: D[i-3]+A[i-1]+A[i]int A[10001], D[10001];int main() {int n, ans=0;cin >> n;for (int i = 1; i > A[i];D[1] = A[1];D[2] = A[1] + A[2];for (int i = 3; i
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 11722번:가장 긴 감소하는 부분 수열 답 algorithm헤더가 필요한 *max_element()함수를 사용해 풀었습니다. *max_element(배열.begin(),배열.end())무조건 시작은 0번째 인덱스부터 입니다.123456789101112131415161718192021222324#include #include #include using namespace std;int main() { int n; cin >> n; //*max_element(배열의처음(*0번째 인덱스 부터 시작한다).begin(),끝.end()) vector a(n); vector d(n); for (int i = 0; i > a[i]; for (int i = 0; i
(C++) - 백준(BOJ)코딩 2579번 : 계단오르기 답 www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 2차원 bottom up dp로 풀었습니다 풀이방법 1. 각 계단을 stair[i]로 입력 받습니다. 2. 점화식을 생각합니다. i번째 계단을 올라갔을 때 몇 번 연속해 올라가 있는지에 대한 상태가 필요하므로 2차원 배열 d를 선언합니다. d[i][j] = i번째 계단을 j번 연속으로 올라갈 때 최대값 d[i][1] => 1번 연속으로 올라갔으므로 i-2번째 계단은 올라가거나 건너뛰거나 상관없습니다. 따라서 다음 점화식을 ..
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 9465번:스티커 답 #include #include using namespace std;int D[100001][3], A[100001][2];int main() {int n, T;int ans = 0;cin >> T;for (int k = 0; k > n;for (int i = 0; i A[j][i];}}D[0][0] = D[1][0] = D[2][0] = 0;for (int i = 1; i
(C++, Python3) - 백준(BOJ) 11055번 :가장 큰 증가 부분 수열 답 https://www.acmicpc.net/problem/11055dp문제였습니다.📕 풀이방법📔 입력 및 초기화배열길이 n과 배열을 arr를 선언 후 입력받습니다.📔 풀이과정완전 탐색으로 i까지 도달했을 때 가장 큰 증가 부분 수열의 값을 d[i]라 하면 다음과 같은 점화식이 가능합니다. $${ if \ arr[i] > arr[j] \ D[i] = MAX(D[j](0arr[i]가 가장 큰 값이므로 그보다 작은 arr[j]를 발견할 경우 그때의 D[j]값에서 현재 선택 값인 arr[i]를 더한 값의 최댓값을 d[i]에 저장하면 됩니다. n이 1000까지이므로 O(N^2)로 동작 가능한 풀이입니다.📔 정답 출력 | 반환정답 배열의 가장 큰 원소를 반환합니다.📕 Code📔 C++#include ..