백준 57

백준 11726번 2xn 타일링 (java)

[Silver III] 2×n 타일링 - 11726문제 링크성능 요약메모리: 14372 KB, 시간: 104 ms분류다이나믹 프로그래밍제출 일자2024년 9월 3일 01:50:06문제 설명2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.입력첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)출력첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.풀이일단 2x1 부터 차례 차례 모든 경우의 수를 그려보았다.일단 적어보고 나니까 N = N-1 + N-2 라는 규칙이 보였다. 그리고 천천히 이유를 생각해보니 N에서 나올 수 있는 경우의 수는 N-1에 세로..

백준 2024.09.03

백준 9095번 1, 2, 3 더하기 (java)

[Silver III] 1, 2, 3 더하기 - 9095문제 링크성능 요약메모리: 15852 KB, 시간: 112 ms분류다이나믹 프로그래밍제출 일자2024년 9월 2일 02:39:59문제 설명정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.1+1+1+11+1+21+2+12+1+12+21+33+1정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.출력각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.풀이이 문..

백준 2024.09.02

백준 17626번 Four Squares (java)

[Silver III] Four Squares - 17626문제 링크성능 요약메모리: 14548 KB, 시간: 144 ms분류브루트포스 알고리즘, 다이나믹 프로그래밍제출 일자2024년 8월 31일 03:41:43문제 설명라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 12으로 표현할 수도 있다. 역사적으로 암산의 명수들에게 공통적으로 주어지는 문제가 바로 자연수를 넷 혹은 그 이하의 제곱수 합으로 나타내라는 것이었다. 1900년대 초반에 한 암산가가 15663 = 1252 + 62 + 12 + 12라는 해를 구하는데 8초가 걸렸다는 보고가 있다..

백준 2024.08.31

백준 2579번 계단 오르기 (java)

[Silver III] 계단 오르기 - 2579문제 링크성능 요약메모리: 14212 KB, 시간: 100 ms분류다이나믹 프로그래밍제출 일자2024년 8월 30일 03:49:22문제 설명계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다.예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다.계단 오르는 데는 다음과 같은 규칙이 있다.계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계..

백준 2024.08.30

백준 1010번 다리 놓기 (java)

[Silver V] 다리 놓기 - 1010문제 링크성능 요약메모리: 14748 KB, 시간: 128 ms분류조합론, 다이나믹 프로그래밍, 수학제출 일자2024년 8월 28일 17:28:10문제 설명재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪고 있음을 알고 다리를 짓기로 결심하였다. 강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 재원이는 강 주변을 면밀히 조사해 본 결과 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M)재원이는 서쪽의 사이트와 동쪽의 사이트를 다리로 연결하려고 한다. (이때 한 사이트에는 최대 한..

백준 2024.08.28

백준 11053번 가장 긴 증가하는 부분수열 (java)

[Silver II] 가장 긴 증가하는 부분 수열 - 11053문제 링크성능 요약메모리: 15352 KB, 시간: 124 ms분류다이나믹 프로그래밍제출 일자2024년 8월 27일 17:38:13문제 설명수열 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의 가장 긴 증가하는 부분 수열의 길이를 출력한다.풀이LIS 알고..

백준 2024.08.27

백준 18353번 병사 배치하기 (java) (LIS 알고리즘)

[Silver II] 병사 배치하기 - 18353문제 링크성능 요약메모리: 14784 KB, 시간: 144 ms분류다이나믹 프로그래밍, 가장 긴 증가하는 부분 수열: O(n log n)제출 일자2024년 8월 26일 22:32:43문제 설명N명의 병사가 무작위로 나열되어 있다. 각 병사는 특정한 값의 전투력을 보유하고 있으며, 병사를 배치할 때는 전투력이 높은 병사가 앞쪽에 오도록 내림차순으로 배치를 하고자 한다. 다시 말해 앞쪽에 있는 병사의 전투력이 항상 뒤쪽에 있는 병사보다 높아야 한다.또한 배치 과정에서는 특정한 위치에 있는 병사를 열외시키는 방법을 이용한다. 그러면서도 남아있는 병사의 수가 최대가 되도록 하고 싶다.예를 들어, N=7일 때 나열된 병사들의 전투력이 다음과 같다고 가정하자.이 때 ..

백준 2024.08.27

백준 1463번 1로 만들기 (java)

[Silver III] 1로 만들기 - 1463문제 링크성능 요약메모리: 79372 KB, 시간: 216 ms분류다이나믹 프로그래밍제출 일자2024년 8월 25일 22:25:49문제 설명정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.입력첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.출력첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 풀이다이나믹 프로그래밍으로 한 번 풀어봤다. 다이나믹 프로그래밍이란 이전의 결과를 저장하고 다음 함수에 사..

백준 2024.08.25

백준 19621번 회의실 배정 (java)

[Silver II] 회의실 배정 2 - 19621문제 링크성능 요약메모리: 14168 KB, 시간: 132 ms분류다이나믹 프로그래밍제출 일자2024년 8월 18일 20:28:19문제 설명서준이는 아빠로부터 N개의 회의와 하나의 회의실을 선물로 받았다. 각 회의는 시작 시간, 끝나는 시간, 회의 인원이 주어지고 한 회의실에서 동시에 두 개 이상의 회의가 진행될 수 없다. 단, 회의는 한번 시작되면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작 시간은 끝나는 시간보다 항상 작다. N개의 회의를 회의실에 효율적으로 배정할 경우 회의를 진행할 수 있는 최대 인원을 구하자.입력첫째 줄에 회의의 수 N이 주어진다. 둘째 줄부터 N + 1 줄까지 공백을 사이에 ..

백준 2024.08.18

백준 5567번 결혼식 (java)

[Silver II] 결혼식 - 5567문제 링크성능 요약메모리: 20124 KB, 시간: 176 ms분류그래프 이론, 그래프 탐색제출 일자2024년 8월 18일 02:29:59문제 설명상근이는 자신의 결혼식에 학교 동기 중 자신의 친구와 친구의 친구를 초대하기로 했다. 상근이의 동기는 모두 N명이고, 이 학생들의 학번은 모두 1부터 N까지이다. 상근이의 학번은 1이다.상근이는 동기들의 친구 관계를 모두 조사한 리스트를 가지고 있다. 이 리스트를 바탕으로 결혼식에 초대할 사람의 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 상근이의 동기의 수 n (2 ≤ n ≤ 500)이 주어진다. 둘째 줄에는 리스트의 길이 m (1 ≤ m ≤ 10000)이 주어진다. 다음 줄부터 m개 줄에는 친구 관계 ai bi가 ..

백준 2024.08.18