본문 바로가기

알고리즘 기초1 Java

(20)
다이나믹 프로그래밍_2133 : 타일채우기 JAVA 문제3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.입력첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다.출력첫째 줄에 경우의 수를 출력한다.예제 입력 1 복사2예제 출력 1 복사3힌트아래 그림은 3×12 벽을 타일로 채운 예시이다. 풀이과정 1. 1*2 이나 2*1 타일로 해야되기 때문에 무슨 짓을 하던 n이 홀수라면 전체 칸 수(3*n)이 홀수 이므로 2칸짜리 타일로 타일링이 불가합니다. 즉 n이 짝수일때만 타일링이 가능합니다. 이 부분은 예외로 처리합니다. 2. n=2일때 3가지 모양이 나옵니다. 3. n=4일때 n=2일때 나왔던 모양에서 3가지 모양이 더 추가되므로, (n=2에서 나온 모양수) * (3) 임을 알 수 있습니다.그럼 f(4) = f(2)*3 임을 알 수 있..
다이나믹 프로그래밍_1912 : 연속합 JAVA 문제n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.입력첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.출력첫째 줄에 답을 출력한다.예제 입력 1 복사1010 -4 3 1 5 6 -35 12 21 -1예제 출력 1 복사33예제 입력 2 복사102 1 -4 3 4 -4 6 5 -5 1예..
다이나믹 프로그래밍_11054 : 가장 긴 바이토닉 부분 수열 JAVA 문제수열 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가 주어졌을 때, 그 수열의 부분 수열 중 바이토닉 수열이면서 가장 긴 수열의 길이를 구하는 프로그램을 작성하시오.입력첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)출력첫째 줄에 수열 A의 부분..
다이나믹 프로그래밍_10844 : 가장 긴 감소하는 부분 수열 JAVA 가장 긴 감소하는 부분 수열 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 256 MB 34867 21614 17754 62.953% 문제 수열 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의 가장 긴 감소하는 부분 수열의 길이를 출력한다. 예제 입력 1 복사 6 10 30 10 20 20 1..
다이나믹 프로그래밍_10844 : 가장 긴 증가하는 부분 수열 JAVA 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000) 출력 첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 예제 입력 1 복사 6 10 20 10 30 20 50 예제 출력 1 복사 4 다이나믹 프로그램 Buttom-up 방식으로 풀었다. import java.io.*; import java.util.*;..
다이나믹 프로그래밍_2193 : 이친수 JAVA 문제 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되므로 이친수가 아니다. N(1 ≤ N ≤ 90)이 주어졌을 때, N자리 이친수의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. 출력 첫째 줄에 N자리 이친수의 개수를 출력한다. 예제 입력 1 복사 3 예제 출력 1 복사 2 다..
다이나믹 프로그래밍_10844 : 쉬운 계단 수 JAVA 쉬운 계단 수 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 256 MB 146709 47319 34551 30.635% 문제 45656이란 수를 보자. 이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다. N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다. 입력 첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 출력 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. 예제 입력 1 복사 1 예제 출력 1 복사 9 예제 입력 2 복사 2 예제 출력 2 복사 17 문제 설명을 보면 100자리 수까지 주어지니 기본 형식은 long 타입으로 간다. 이 문제의 키..
다이나믹 프로그래밍_15990 : 1,2,3 더하기 5 JAVA 1, 2, 3 더하기 5 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 (추가 시간 없음) 512 MB 29100 9786 6891 30.809% 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 3가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 단, 같은 수를 두 번 이상 연속해서 사용하면 안 된다. 1+2+1 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 100,000보다 작거나 같다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 ..