분류 전체보기 123

최대공약수 최소공배수, 진법

[ 최대공약수 ] - 유클리드 호제법을 이용해서 구할 수 있다.- 두 수 A,B의 최대공약수를 구하려면, A를 B로 나눈 나머지가 r이라고 할 때, GCD(A, B) = GCD(B, r) r = 0이 될 때의 B가 최대 공약수이다. int GCD(int a, int b) { while (b != 0) { int r = a % b; a = b; b = r; } return a; }[ 최소공배수 ] - 다음 관계를 이용하여 푼다. LCM * GCD = A * B LCM = A * B / GCD [ N진법 수를 쉽게 10진법 수로 바꾸기 ] ex) N = 3진법 수 102를 10진법 수로 바꾸기 왼쪽에서부터 순차적으로 전개해나간다. 102 먼저 가장 왼쪽에 있는 수 1 -> 1기존 수에 3을 곱하고 0을 더한..

Algorithm/Algorithm 2018.08.15

[어려움][다이나믹 프로그래밍] 암호코드

문제 링크 : https://www.acmicpc.net/problem/2011 암호코드 성공한국어 시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB141022492187219.059%문제상근이와 선영이가 다른 사람들이 남매간의 대화를 듣는 것을 방지하기 위해서 대화를 서로 암호화 하기로 했다. 그래서 다음과 같은 대화를 했다.상근: 그냥 간단히 암호화 하자. A를 1이라고 하고, B는 2로, 그리고 Z는 26으로 하는거야.선영: 그럼 안돼. 만약, "BEAN"을 암호화하면 25114가 나오는데, 이걸 다시 글자로 바꾸는 방법은 여러가지가 있어.상근: 그렇네. 25114를 다시 영어로 바꾸면, "BEAAD", "YAAD", "YAN", "YKD", "BEKD", "BEAN" 총 6가지가 나오..

[어려움][다이나믹 프로그래밍] 합분해

문제 링크 : https://www.acmicpc.net/problem/2225 합분해 성공시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB71063061228442.684%문제0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오.덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다.입력첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다.출력첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.예제 입력 1 복사20 2 예제 출력 1 복사21 [ 문제 풀이 ] D[K][N] = K개를 더해서 합이 N이 되는 수 [ 최종 구현(C++..

[주의][다이나믹 프로그래밍] 타일 채우기

문제 링크 : https://www.acmicpc.net/problem/2133 타일 채우기 성공한국어 시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB115654028314235.319%문제3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.입력첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다.출력첫째 줄에 경우의 수를 출력한다.예제 입력 1 복사2 예제 출력 1 복사3 힌트아래 그림은 3×12 벽을 타일로 채운 예시이다. [ 문제 풀이 ] D[i]를 3 x i 벽을 타일로 채울 수 있는 경우의 수로 둔다. 경우의 수를 계산해보면, 즉, D[i] = D[i-2] x 3 + D[i- 4] x 2D[i - 6] x 2D[i - 8] x 2...D[0] x 2 ※ 주의. ..

[다이나믹 프로그래밍] 제곱수의 합

문제 링크 : https://www.acmicpc.net/problem/1699 제곱수의 합 성공시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB104194279317241.046%문제어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다. 이 경우, 수학자 숌크라테스는 “11은 3개 항의 제곱수 합으로 표현할 수 있다.”라고 말한다. 또한 11은 그보다 적은 항의 제곱수 합으로 표현할 수 없으므로, 11을 그 합으로써 표현할 수 있는 제곱수 항의 최소 개수는 3이다.주어진 자연수 N을 이렇게 제곱수들의 합으로 표현할..

[다이나믹 프로그래밍] 계단 오르기

문제 링크 : https://www.acmicpc.net/problem/2579 계단 오르기 성공시간 제한메모리 제한제출정답맞은 사람정답 비율1 초128 MB2829710962810938.375%문제계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다.예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째, 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다.계단 오르는 데는 다음과 같은 규칙이 있다.계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나,..

[주의][다이나믹 프로그래밍] 연속합

문제 링크 : https://www.acmicpc.net/problem/1912 연속합 성공시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB331918886617026.961%문제n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 숫자를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 숫자는 한 개 이상 선택해야 한다.예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.입력첫째 줄에 정수 n(1≤n≤100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이..

[다이나믹 프로그래밍] 가장 긴 바이토닉 부분 수열

문제 링크 : https://www.acmicpc.net/problem/11054 가장 긴 바이토닉 부분 수열 성공시간 제한메모리 제한제출정답맞은 사람정답 비율1 초256 MB51342643215653.806%문제수열 S가 어떤 수 Sk를 기준으로 S1 Sk+1 > ... SN-1 > SN을 만족한다면, 그 수열을 바이토닉 수열이라고 한다.예를 들어, {10, 20, 30, 25, 20}과 {10, 20, 30, 40}, {50, 40, 25, 10} 은 바이토닉 수열이지만, {1, 2, 3, 2, 1, 2, 3, 2, 1}과 {10, 20, 30, 40, 20, 30} 은 바이토닉 수열이 아니다.수열 A가 주어졌을 때, 그 수열의 부분 수열 중 바이토닉 수열이면..

[다이나믹 프로그래밍] 가장 긴 감소하는 부분 수열

문제 링크 : https://www.acmicpc.net/problem/11722 가장 긴 감소하는 부분 수열 성공시간 제한메모리 제한제출정답맞은 사람정답 비율1 초256 MB51603193265665.066%문제수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 이고, 길이는 3이다.입력첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)출력첫째 줄에 수열 A의 가장 긴 감소하는 부분 수열의 길이를 출력한다.예제..

[다이나믹 프로그래밍] 가장 큰 증가 부분 수열

문제 링크 : https://www.acmicpc.net/problem/11055 가장 큰 증가 부분 수열 성공시간 제한메모리 제한제출정답맞은 사람정답 비율1 초256 MB84093789306746.463%문제수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113이다.입력첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)출력첫째 줄에 수..