본문 바로가기

백준38

[Java] 백준 11054번 가장 긴 바이토닉 부분 수열 https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 바이토닉 수열이란 특정값을 기준으로 왼쪽은 오름차순, 오른쪽은 내림차순인 수열을 말한다. LIS(최장 증가 부분 수열) 문제와 비슷하다. 왼쪽과 오른쪽으로 각각 탐색하여 더하고 중복을 빼면 된다. 다음은 예제 입력인 {1 5 2 1 4 3 4 5 2 1} 수열에서 왼쪽, 오른쪽 각각 LIS를 탐색한 결과이다. 두 수열을 합친 결과이다. 수열을 합친 후 자기 자신이 중복되어 있으므로 -1을 해주어 결과를 구한다. 따라.. 2021. 11. 9.
[Java] 백준 9095번 1, 2, 3 더하기 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 www.acmicpc.net 문제 설명 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하기 T : 테스트 케이스 개수 n : 양수, 11보다 작다 배열 dp [n]은 n을 1,2,3의 합으로 나타내는 방법의 수를 의미한다. 우선 n은 11보다 작으니 배열 dp []의 크기를 int [11]로 초기화한다. 규칙을 찾기 위해 n.. 2020. 6. 24.
[Java] 백준 1904번 01타일 https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이�� www.acmicpc.net 문제 설명 1과 00 타일로 크기가 N인 2진 수열을 만들 수 있는 가짓수 N은 N ≤ 1,000,00인 자연수 dp [N]은 크기가 N인 2진 수열을 만들 수 있는 가지 수라고 하자. N=1부터 경우의 수를 생각해보자. dp [1] = 1 (1) dp [2] = 2 (11, 00) dp [3] = 3 (111, 100, 001) -> 00 타일은 0 두 개가 붙어 있으므로 000은 만들 수 없다 .. 2020. 6. 5.
[Java] 백준 1520번 내리막 길 https://www.acmicpc.net/problem/1520 1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으� www.acmicpc.net import java.util.Scanner; public class Main { static int dp[][]; //경로 개수 static int map[][]; static int M,N; public static void main(String[] args) { Scanner s = new Scanner(System.in); M = s.nextInt(); //세로 N = s.nextInt(); .. 2020. 6. 3.
[Java] 11727번 2×n 타일링 2 https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s= new Scanner(System.in); int N = s.nextInt(); int dp[] = new int[1001]; // (1 ≤ n ≤ 1,000) dp[1]=1; dp[2]=3; for(int i=3;i 2020. 6. 3.
[Java] 백준 1010번 다리 놓기 https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 문제 설명 서쪽의 N개의 사이트와 동쪽의 M개의 사이트를 다리로 연결할 수 있는 경우의 수 구하기 (N ≤ M) 한 사이트에는 최대 한 개의 다리만 연결될 수 있다 다리끼리는 서로 겹쳐질 수 없다 배열 dp[N][M]은 서쪽의 N개의 사이트와 동쪽의 M개의 사이트를 다리로 연결하는 경우의 수를 의미한다. 다리는 서로 겹쳐질 수 없다는 조건이 있으므로 하나의 다리를 고정해놓고 생각해보았다. N=2인.. 2020. 6. 3.