알고리즘8 [Baekjoon/Python] 백준: 15990 1, 2, 3 더하기 5 다이나믹 프로그래밍 (DP) 문제입니다.사실 간단해 보이는 문제였지만, 같은 수를 두 번 이상 연속해서 사용해서는 안된다.라는 조건이 있어서 생각보다는 쉽지 않았던 문제입니다. 마지막에 어떤 수를 배열했는지만 알면, 숫자가 연속되는 것을 막을 수 있다는 것만 활용하면 금방 풀리는 문제였습니다. 123마지막이 1101 => 2 + 1마지막이 2011 => 1 + 2마지막이 3001 => 3 이런식으로 마지막이 어떤 숫자로 끝나는 지에 따라 dp 배열을 달리 했습니다. 그러면 그 다음 4부터는 어떻게 구하면 될까요? 이런식으로 규칙을 찾아냈습니다.dp[2][4] = dp[1][2] + dp[3][2] 이므로 0입니다. import sysinput = sys.stdin.readlinedp = [[0] .. 2025. 3. 25. [Java] 조합(Combination) 구현하기 파이썬에는 조합 라이브러리가 있어서 편했는데 자바는 직접 구현해야 하더라 ......... n개 중에 r 개를 고르는 것 (순서 상관 없이, 중복 없이)예시 : 6명 중 3명만 학생회에 가입할 수 있다. 학생회의 가입하는 모든 경우는 ? import java.util.ArrayList;import java.util.List;public class CombinationExample { public static void main(String[] args) { int[] arr = {1, 2, 3, 4}; int r = 3; // 원하는 조합의 개수 List result = getCombinations(arr, r); // 조합을 구하는 메서드 publi.. 2024. 10. 19. [Baekjoon/JAVA] 3020 개똥벌레 (이분 탐색) 문제개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 번갈아가면서 등장한다. 아래 그림은 길이가 14미터이고 높이가 5미터인 동굴이다. (예제 그림)이 개똥벌레는 장애물을 피하지 않는다. 자신이 지나갈 구간을 정한 다음 일직선으로 지나가면서 만나는 모든 장애물을 파괴한다.위의 그림에서 4번째 구간으로 개똥벌레가 날아간다면 파괴해야하는 장애물의 수는 총 여덟개이다. (4번째 구간은 길이가 3인 석순과 길이가 4인 석순의 중간지점을 말한다) 하지만, 첫 번째 구간이나 다섯 번째 구간으로 날아간다면 개똥벌레는 장애물 일곱개만 파괴하면 된다.동굴의 크기와 높이, 모든 장.. 2024. 9. 7. [Baekjoon/JAVA] 3079 입국심사 이분 탐색을 잘 못하는 거 같아서 연습하려고 푼 문제근데 어떻게 이걸 이분탐색으로 풀 수 있는지 잘 감이 안와서 애먹었다. 모든 사람이 심사를 받는 데 걸리는 시간을 이분 탐색으로 찾으면 되는 문제였음 !!해당 시간을 mid값으로 갱신하면서 찾으면 되는데, 해당 mid 시간동안 모든 심사대에서 각각 몇명 심사할 수 있는지를 더해주면서 조건을 충족하지 못 한다면 시간을 늘려주고 (left 값 갱신)조건을 충족한다면 시간을 줄여준다. (right 값 갱신) import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringT.. 2024. 9. 7. [Baekjoon/JAVA] 15989 1, 2, 3 더하기 4 문제가 짧아서 골랐는데 읽다보니 dp 의 느낌이 강해서 아 괜히 건드렸나 ........생각했던 문제 근데 생각보다 규칙만 찾으면 쉽게 풀리는 문제였다 N = 11 N = 21 ( x 2)2 N = 31 ( x 3)2 ( + 1)3 N = 41 ( x 4)2 ( + 1) ( + 1)3 ( + 1)2 + 2 N = 51 ( x 5)2 ( + 1) ( + 1)3 ( + 1) ( + 1)2 + 2 ( + 1)3 + 2 N = 61 ( x 6)2 ( + 1) ( + 1) ( + 1)3 ( + 1) ( + 1) ( + 1)2 + 2 ( + 1) ( + 1)3 + 2 ( + 1)2 + 2 + 2 3 + 3 이런식으로 규칙을 보다보면, N-1 에서 N 으로 갈때 몇가지 케이스만 추가되는 것을 알 수 있다.단순히 + .. 2024. 9. 1. [Baekjoon/JAVA] 1446 지름길 간만에 dp 문제를 스스로 풀었다 !! 소스 코드import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int D = Integer.parseInt(st.nextToken()); /.. 2024. 8. 31. 이전 1 2 다음