N개의 동전의 가치를 합하여, K원을 만드는 경우를 구한다. 1, 2, 5 원의 동전을 이용하여 10원을 만드는 경우는 다음과 같다. 사용동전1 2 5 개수 1 1 1 2 1+1 2 2 3 1+1+1 1+2 2 4 1+1+1+1 1+1+2, 2+2 3 5 1+1+1+1+1 1+1+1+2, 1+2+2 5 4 5원을 만드는 경우는 위와 같다. 1원동전 사용: 1원을 5개 사용2원동전 사용: 3원을 만드는 경우에 2원을 더하여 생성5원동전 사용: 0원을 만드는 경우에 5원을 더하여 생성 https://www.acmicpc.net/problem/2293
두줄로 타일깔기는 라인 길이에 따라 타일을 배열하는 방법을 생각해서 처리하면된다. 구현할 때 재귀를 이용하여 처리하면 stack overflow 가 발생한다. f(n) 을 구하는 방법은 f(n-1) 의 타일 개수에 1 x 2 타일을 하나 추가하는 방법과f(n-2)의 타일 개수에 2 x 2 타일을 추가하는 방법 두개를 더하면 된다. http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=687&sca=3050http://huiyu.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%ED%83%80%EC%9D%BC-%EC%B1%84%EC%9A%B0%EA%B8%B0-%EB%AC%B8%EC%A0%9C
계단오르기는 다이나믹으로 해결할 수 있다. 연속해서 오른 계단이 하나인 것과 두개인 것을 계산하여 처리할 수 있다. 1번은 연속해서 오른 계단이 하나인것, 즉 두번 뛰어서 오른 계단에 대한 정보를 확인하는 것이다. i-2 번째 계단의 1번 연속, 2번 연속해서 오른 계단의 최대값가 현재 계단의 값의 합이다. 2번은 연속해서 오른계단이 두개인것, 즉 이전계단에서 한번오른 것이다. 이전계단에서 한번오른 값과 현재의 값을 더하여 결정한다. http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=792&sca=3050
숫자카드 문제는 다이나믹 프로그래밍을 이용하여 해결할 수 있다. 27123을 2글자씩 읽어서 숫자로 확인하고 34이상이면 분할한다. 27, 123 으로 분할하고 카드로 표현할 수 있는 형태가 몇개인지 확인한다. 카드로 표현 가능한 개수는 마지막 수를 표현하는 카드가 한자리 수인지, 두자리 수인지로 구분하여 점화식을 구성한다. D[i] = (D[i-1][0] * 2 )/2 + D[i-1][1] + (D[i-1][0] * 2 )/2 끝자리가 한자리수이면 마지막에 하나더 숫자가 붙어서 두자리 또는 한자리가 될수 있기 때문이다. 끝자리가 두자리수 이면 한자리수로 붙어서 표현이 가능하다. http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=683&sca=3050
극장좌석문제는 다이나믹 프로그래밍으로 풀이가 가능하다. 전제조건은 좌우 한칸으로는 이동이 가능하다. 좌석이 2개일 경우 아래의 두개의 경우가 가능1, 22, 1좌석이 3개일때는 좌석이 2개인 경우에서 끝자리가 2인 경우는 3과 교환이 가능하기 때문에 2가지 경우가 나오고, 1인경우는 3과 교환이 불가능 하여 끝에 3이 붙는 하나의 경우만 나온다. 끝이 2 인 경우: (1*2)/2 + 1 = 2끝이 2 이 아닌 경우: (1*2)/2 = 1좌석이 3개인 경우 3가지 종류가 가능1, 2 -> 1, 2, 3 1, 3, 22, 1 -> 2, 1, 3좌석이 4개일때는 좌석이 3개인 경우에서 끝자리가 3인 경우는 4와 교환이 가능하기 때문에 4가지 경우가 나오고, 2인 경우는 4와 교환이 불가능하이 끝에 4가 붙는 ..
그리디 알고리즘을 이용하여 저울 문제를 해결할 수 있다.
가장높은 탑 쌓기 문제는 다이나믹 프로그래밍을 이용하여 처리한다. 우선 밑면의 넓이 기준으로 정렬을 하면 현재 인덱스보다 작은 인덱스의 무게만 비교하면 넓이는 신경쓰지 않고 확인할 수 있다. 대신 정렬을 이용하기 때문에 기존의 인덱스가 변하게 되므로 인덱스만 따로 저장해 둔다. 그다음은 현재 벽돌보다 작은 무게의 벽돌을 찾아서 현재벽돌의 높이 + 작은무게벽돌의 높이(자신의 위에 있는 벽돌의 높이도 추가되어 있음)만 저장한다. 더 큰 높이의 벽돌이 있으면 갱신한다. 올릴 수 있는 벽돌이 없다면 자신의 높이만 저장한다. 이렇게 result 배열에 결과를 저장하고가장 높은 높이의 벽돌을 찾아서 해당 벽돌의 인덱스를 역순으로 찾아서 출력하면 된다. http://www.jungol.co.kr/bbs/board.p..
배낭채우기문제는 다이나믹으로 처리한다. 배낭의 무게를 10부터 이동해가면서, 현재 시점에 최고의 무게를 확인하면서, 현재의 무게를 뺀 이전 무게의 최고값과 현재의 최고값을 더하면서 배낭을 채우면 된다. 보석 배낭무게 무게 가치 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 40 - 40 40 80 90 120 150 140 190 200 230 260 270 300 3 50 - - 50 50 90 100 130 160 170 200 210 240 270 280 5 110 - - - - 110 110 150 160 190 220 230 260 270 300 10 200 - - - - - - - - - 200 200 240 250 280 맥스값 - 40 50 80 110 120 150 160..
아무리 생각해도 해결책이 생각이 나지 않았는데 다른분이 푸신 방법을보고 해결함 사용가능한 최소의 동전개수를 구하기 위해서는동전의 총합으로 사용가능한 최대값에서 구하려는 동전의 값을 뺀 나머지를 구할 수 있는최대의 동전개수를 구해서 남은 나머지가 최소의 값이 된다. http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=466&sca=3020http://m.blog.naver.com/skyblue_2002/220631970001
- Total
- Today
- Yesterday
- 파이썬
- S3
- 정올
- mysql
- airflow
- Linux
- AWS
- Tez
- SQL
- hbase
- Hadoop
- oozie
- emr
- 하둡
- error
- HDFS
- ubuntu
- HIVE
- 백준
- yarn
- 다이나믹
- 알고리즘
- SPARK
- Python
- bash
- 하이브
- java
- 오류
- nodejs
- build
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |