dp

    [프로그래머스 Lv.3] N으로 표현 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42895 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이number를 만들기 위해 필요한 N의 수를 구하는 문제이다. 하지만 문제의 조건을 살짝 다르게 생각하여 풀이하면 쉽게 해당 문제를 풀이할 수 있다.N을 i개 사용해서 만들 수 있는 숫자들을 알아내고, 만약 원하는 숫자가 알아낸 숫자들 안에 있는지를 확인하면 된다. 또한 N을 i개 사용해서 만들 수 있는 숫자는 (N을 i-j개 사용하여 만들 수 있는 숫자)(사칙연산)(N을 j개를 사용해..

    [프로그래머스 Lv.2] 피보나치 수 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12945 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이피보나치 문제는 전형적인 DP(Dynamic Programming) 문제이다. DP의 메모이제이션을 활용하여 재귀함수 속에서 이미 계산된 n에서의 피보나치를 저장해두고, n에서의 피보나치 재귀 함수를 호출하면 재귀함수 없이 즉각적으로 저장이 된 해당 수를 반환하도록 하여 재귀함수의 호출 수를 줄임으로써 시간 초과 없이 문제를 해결할 수 있다. import syssys.setrecursi..

    [프로그래머스 Lv.3] 정수 삼각형 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이DP 문제이기에 문제 해결을 위한 규칙을 찾아서 점화식을 세우는 것이 가장 중요하다.삼각형의 위에서부터 아래로 내려오면서 숫자를 더하여 각 위치에 들어갈 수 있는 최댓값을 얻어내고, 이를 저장하는 방식을 반복하여 삼각형을 모두 채운다. 가장 아래층에서의 최댓값이 구하고자 하는 답이 된다.def solution(triangle): _triangle = [] # 각 위치에서의 최대값..

    [프로그래머스 Lv.3] 최적의 행렬 곱셈 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12942 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이dp 문제이다. 따라서 문제 상황을 해결하기 위한 점화식을 세워야 한다.일반적인 상황을 가정하고 이 상황을 해결하는 과정을 생각해 보면서 알맞은 점화식을 유도해 보자. 4개의 행렬 M1, M2, M3, M4가 있으며,  arr라는 배열은 arr[i][j]일 때, i 행렬부터 j 행렬까지의 곱을 수행할 때의 계산 수의 최솟값이라고 가정하자. 이런 상황에서 M1, ((M2, M3), M4)..

    (Python) 백준 1912번 - 연속합

    문제 링크: https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 풀이 Dynamic Programming 문제답게 코드 구현보다는 문제 해결을 위한 아이디어를 생각하는 것이 더 어려운 문제이다. 문제 해결을 위한 아이디어는 다음과 같다. 우선 해당 인덱스까지의 최대값을 담을 배열을 선언한다. 그 후 처음부터 순회하며 해당 인덱스까지의 최대값을 계산하고 이를 저장한다. 해당 인덱스까지의 최대값은 이전 인덱스에서의 최대값 또는 현재 인덱스의 값이 된다. 최종적으..

    (JAVA) 거스름돈

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12907 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 처음에 이 문제를 딱 보았을 때는 DFS로 풀면 되지 않나라는 생각을 가지고 코드를 빠르게 작성했다. 작성 후에 테스트 케이스들도 무난하게 통과하고, 나름대로 엣지 케이스들도 추가하여 테스트를 진행했는데 모두 잘 통과해서 기분 좋게 제출을 하였지만 역시나 한번에 통과할 수 없었다. 필자가 푼 방법으로는 money 배열에 중복된 값이 들어오는 경우에는 실패하는 코드였고, 만약 올바..

    (JAVA) 올바른 괄호의 갯수

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12929 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 난이도가 4인 문제임을 생각하면 코드가 매우 단순함을 확인할 수 있다. 코드 자체는 단순한데 문제 풀이를 위한 방법을 생각하는 것이 어려운 문제라고 생각할 수 있다. n개 이전의 괄호쌍으로 만들 수 있는 개수를 활용하는 Dynamic Programming을 사용하여 풀이하였다. 예를 들어 괄호쌍 2개와 3개를 사용해 만들 수 있는 전체 올바른 괄호쌍의 개수를 계산해 보겠다. 우선..

    (C++) 백준 9095번 - 1, 2, 3 더하기

    문제 링크 : https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 풀이 다이나믹 프로그래밍을 활용하여 풀이하였다. 입력이 1일 때 1, 입력 2일 때 2, 입력이 3일 때 4이라는 초기값을 부여해 준 후, 입력값이 i일 때의 값은 arr[i-1]+arr[i-2]+arr[i-3] 임을 이용해 풀이하였다. #include using namespace std; int arr[12]; int T, n; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> T; arr[1] = 1; ..

    (C++) 백준 1463번 - 1로 만들기

    문제 링크 : https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 풀이 다이나믹 프로그래밍을 활용하여 풀이하였다. 입력이 1일 때 0, 입력 2일 때 1이라는 초기값을 부여해 주고 그 이후에 상황에 맞춰 1씩 더해주는 방식으로 풀이하였다. #include #include #include using namespace std; int arr[1000002]; int X; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> X; arr[2] = 1; for(int i = 3; i