본문 바로가기

분류 전체보기131

다이나믹 프로그래밍 - 금광 [문제] n x m 크기의 금광이 있다. 금광은 1 x 1 크기의 칸으로 나누어져 있으며, 각 칸은 특정한 크기의 금이 들어 있다. 채굴자는 첫 번째 열부터 출발하여 금을 캐기 시작한다. 맨 처음에는 첫 번째 열의 어느 행에서든 출발할 수 있다. 이후에 m번에 걸쳐서 매번 오른쪽 위, 오른쪽, 오른쪽 아래 3가지 중 하나의 위치로 이동해야 한다. 결과적으로 채굴자가 얻을 수 있는 금의 최대 크기를 출력해라. 만약 다음과 같이 3 x 4 크기의 금광이 존재한다고 가정하자. [입력] 첫째 줄에 테스트 케이스 T가 입력된다.(1 2023. 2. 23.
닭갈비 재료 닭다리살 2 덩이, 양배추 1/4개, 양파 1개, 작은 감자 1개, 파 약간 양념 : 시중에 판매되는 닭갈비용 양념, 다진 마늘 1, 청양고추 1숟가락 레시피 1. 재료를 모두 미리 준비해둡니다. 닭다리살은 먹기 좋은 사이즈로 잘라서 양념에 버무려주고, 야채는 토막 내줍니다. 2. 팬에 야채를 바닥에, 고기를 위에 올리고 중~강불을 켜줍니다. 3. 지글지글해지면 저어주면서 야채에도 양념을 버무려줍니다. 4. 다 버무려졌고 야채에서 물도 살짝 나왔다면 중~약불로 낮추고 계속 저어줍니다. 닭이 익었다 싶으면 살짝 물어 진짜 익었나 체크해 봅니다. 국물도 살짝 간을 보고 약하다면 소스를 추가해 줍니다. 야채들이 숨이 죽고, 닭이 다 익었다면 불을 꺼줍니다. 4. 마무리로 통깨를 뿌려줍니다. 메모 굉장히 .. 2023. 2. 23.
다이나믹 프로그래밍 - 효율적인 화폐 구성 [문제] N가지 종류의 화폐가 있다. 이 화폐들의 개수를 최소한으로 이용해서 그 가치의 합이 M원이 되도록 하려고 한다. 이때 각 화폐는 몇 개라도 사용할 수 있으며, 사용한 화폐의 구성은 같지만 순서만 다른 것은 같은 경우로 구분한다. 예를 들어 2원, 3원 단위의 화폐가 있을 때는 15원을 만들기 위해 3원을 5개 사용하는 것이 가장 최소한의 화폐 개수이다. [입력] 첫째 줄에 N,M이 주어진다(1 2023. 2. 22.
다이나믹 프로그래밍 - 1로 만들기 [문제] 정수 X가 주어질 때 정수 X에 사용할 수 있는 연산은 다음과 같이 4가지이다. X가 5로 나누어떨어지면, 5로 나눈다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. X에서 1을 뺀다. 정수 X가 주어졌을때, 연산 4개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 예를 들어, 정수가 26이면 다음과 같이 계산해서 3번의 연산이 최솟값이다. 26 - 1 = 25 25 / 5 = 5 5 / 5 = 1 [입력] 첫째 줄에 정수 X이 주어진다. (1 2023. 2. 22.
다이나믹 프로그래밍 - 개미전사 [문제] 개미전사는 부족한 식량을 충당하고자 메뚜기 마을의 식량창고를 몰래 공격하려고 한다. 메뚜기 마을에는 여러 개의 식량창고가 있는데 식량창고는 일직선으로 이어져 있다. 각 식량창고에는 정해진 수의 식량을 저장하고 있ㄷ으며 개미 전사는 식량창고를 선택적으로 약탈하여 식량을 빼앗을 예정이다. 이때 메뚜기 정찰병들은 일직선상에 존재하는 식량창고 중에서 서로 인접한 식량창고가 공격받으면 바로 알아챌 수 있다. 따라서 개미 전사가 정찰병에게 들키지 않고 식량창고를 약탈하기 위해서는 최소한 한 칸 이상 떨어진 식량창고를 약탈해야 한다. 예를 들어 식량창고 4개가 다음과 같이 존재한다고 가정하자. {1, 3, 1, 5} 이때 개미 전사는 두 번째 식량창고와 네 번째 식량창고를 선택했을 때 최댓값.. 2023. 2. 21.
다이나믹 프로그래밍 이론 다이나믹 프로그래밍이란 일반적인 알고리즘 문제를 더 빠르게 해결하기 위해 생긴 기법이다. 다이나믹 프로그래밍은 다음 두 가지 조건을 만족할 때 사용 가능하다. 최적 부분 구조 큰 문제를 작은 문제로 나누고, 작은 문제들의 답을 모아 큰 문제를 해결할 수 있다. 중복되는 부분 문제 동일한 작은 문제들이 반복된다. 이렇게 얘기한다면 크게 와닿지 않는다. 재귀함수의 기본인 피보나치 수열을 예시로 들어보겠다. def fibo(n): if (n == 1 or n == 2): return 1 return (fibo(n - 1) + fibo(n - 2)) 피보나치 수열 함수는 다음과 같이 작성할 수 있다. 이 부분을 잘 모르겠다면 재귀함수를 공부해야한다. 위의 함수를 이용해 f(6)을 구하고자 한다면 그 함수는 f(.. 2023. 2. 21.
[백준] 12015번 가장 긴 증가하는 부분 수열 2 (Python) 정답 코드 및 풀이는 맨 아래에 있습니다. https://www.acmicpc.net/problem/12015 도저히 구상할 수가 없어서 다른 코드를 참고하였다. 다른 코드를 보아도 왜 그런지 원리를 정확히 이해하는 것은 너무 어려웠다. 알고리즘을 적용시키는 스킬을 늘려주는 문제이다. [문제] 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. [입력] 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 .. 2023. 2. 17.
찜닭 닭다리살을 순살로 2키로를 구매했다. 닭다리살을 산 기념으로 찜닭에 도전해 보았다! 자취요리 박무땡님의 콜라찜닭 영상을 참고하였다. 재료 닭다리살 한덩이(200g?), 당근 1/3개, 양파 1/2개, 감자 1개 양념 : 콜라(닭이 2/3 잠길 만큼), 간장 3, 굴소스 2 레시피 1. 해동시킨 닭다리살을 살짝 삶는다. 불순물 및 잡내 제거 2. 살짝 겉이 익었다 싶으면 물을 다 버리고 닭을 자른다. 나는 크게 잘랐는데 먹기 좋게 한입 크기로 자르는 게 더 나을 듯 3. 콜라를 닭이 2/3 정도 잠길 만큼만 넣고 끓인다. 이때 간장과 굴소스를 넣는다. 콜라는 단맛과 색감용도이므로, 콜라가 없다면 설탕, 물엿, 올리고당 등으로 대체 가능 3. 6~7분 후에 야채를 넣으라고 했지만, 나는 순살로 하므로 4~5.. 2023. 2. 17.
[백준] 1300번 K번째 수 (Python) 정답 코드 및 풀이는 맨 아래에 있습니다. https://www.acmicpc.net/problem/1300 '의외로 이분 탐색으로 풀 수 있는 놀라운 문제 1'라고 설명되는 문제이다. 실제로 그랬다. 구상이 상당히 어려웠다. 처음 보았을 땐 이분탐색 알고리즘으로 푸는 방법이 전혀 생각나지 않았다. 구상이 어려워 다른 풀이를 조금 참고하여 풀었다. [문제] 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B의 인덱스는 1부터 시작한다. [입력] 첫째 줄에 배열의 크기 N이 주어진다. N은 10^5보다 작거나 같은 자.. 2023. 2. 16.