목록전체 글 (413)
오답노트
https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net - 문제 파악 자연수 N이 주어지면 그 수는 어떠한 제곱수의 합들로 표현할 수 있다. 최소항으로 만들 때 그 개수를 출력하라. - 나의 접근 질문을 뒤져보니 나와 같은 방식으로 많이 접근한 것 같다. 일단 주어진 수의 sqrt 한 값을 다시 제곱했을 때 자기 자신일 경우 그 수로 대체하여 계속 1의 제곱을 더해 나가는 것. 하지만 이런식으로 하면 12에서 많..
https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net - 문제 파악 주어진 수열에서 1개 이상의 연속되는 수를 선택하여 선택한 수들의 합의 최댓값을 출력하라. - 나의 접근 i 번째 부터 n번째 모두 더하는데 그중에 가장 큰 값을 D 배열에 넣어놨다. 일단 위와 같은 경우는 시간 초과에 당연히 걸리며, 점화식을 전혀 활용하지 못했다. for문을 한번만 사용해야한다는 것 까지는 깨달았지만, D를 어떤 식으로 사용해야할지 더 이상 생각나지 않았다. - 정답 DP ..
https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net - 문제 파악 주어지는 수열에서 적절히 수를 제거하여 증가하는 수열을 만드는데 길이가 가장 긴 수열의 길이와 그 수열을 출력하라. -정답 기본적으로 https://dhjkl123.tistory.com/58 문제와 같고 추가 적으로 가장 긴 증가하는 부분 수열을 출력하는 문제이다. D배열에 넣는 길이가 변할 때마다 영..
https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net - 문제 파악 주어진 수열에서 부분적으로 제거 하여 증가하는 수열을 만들 때 가장 긴 수열의 길이를 출력하라 - 나의 접근 1. 0부터 N까지 주어진 배열을 확인하며, arr[i] 와 가장 차이가 적게 나는 배열을 찾아 거기에 arr[i]+1 값을 넣도록 했다. -> 경우의 수를 너무 좁혀서 다 안찾아지는 그런 경우가 ..
https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net - 문제 파악 이웃한 자리수의 숫자의 차가 1인 수를 계단 수라고 한다. 정수 N이 주어졌을 때, N자리 계단 수를 만들 경우의 수를 구하여라. (0으로 시작하는 계단수는 없음, 0 이전의 수는 없음, 9 다음의 수는 없음) - 나의 접근 N 자리일때 2^(N-1)의 경우가 생기는데 여기서 위와 같은 경우를 빼는 식으로 접근 배열로 안풀려도 풀릴거 같아서 위와 같은 방법으로 접근 했지만 DP 는 배열을 선언해야한다. - 정답 D[i][j] 는 i 번째 자리에 j 가 오는 경우 D[i][j] 는 D[i][j-1]..
https://www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net - 문제 파악 정수 N과 N개의 정수가 주어진다. 각각의 정수를 1,2,3의 합으로 나타낼 수 있는 경우의 수를 출력하라. 단, 1,2,3 중 1개 이상의 숫자를 써야하고 연속해서 사용할 수 없다. - 나의 접근 시간복잡도를 신경안쓰고 일단 초항으로 1, 2, 3을 먼저 초기화하고 4부터 for문을 돌리도록 했는데 초항에 대한 문자열을 초기화하여 무식하게 앞뒤로 붙혀가면서 연속되면 경우의 수에서 제외 해버리는 알고리즘으로 접근했으나, 예상대로 시간..
https://www.acmicpc.net/problem/16194 16194번: 카드 구매하기 2 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net - 문제 파악 정수 N과 정수 P1~Pn이 주어진다. P1~ Pn를 적절히 조합하여 N을 만드는 경우의 수중에서 Pi 요소의 합이 최소값을 출력하라. -정답 https://dhjkl123.tistory.com/54 [DP] BOJ 11052 카드 구매하기 https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이..
https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net - 문제 파악 정수 N 과 P1~PN 의 정수가 주어진다. 1~N 을 적절히 조합하여 N을 만드는 수의 조합에서 Pi들의 합이 최대값을 출력하라. -정답 1. 경우의 수 모든 경우의 수를 살펴 보지 않고 D[i-1] + D[1]만 확인했었다. 점화식을 찾는 도중 D[i-1] + D[1] = D[i-2] + D[2] 를 찾았고, 시간 초과를 염려해서 2중for문을 기피하려고 했다. 하지만 위 점화식은 여러..
가끔 쓰는데가 있어서 여따 올린다 unsigned long long func(int a, int b) { int nChoose = 0, kChoose = 0; unsigned long long p = 1, q = 1; if (b == 0 || a == b) return 1; if (a - b > b) { nChoose = a - b; kChoose = b; } else { kChoose = a - b; nChoose = b; } //nCk or nCn-k for (int j = 1; j = j) q *= j; // k! } return p / q; }
https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net - 문제 파악 정수 N 이 주어지고 1x2 , 2x1 , 2x2 타일로 N을 채우는 경우의 수 출력 - 나의 접근 조합 알고리즘으로 접근해서 예제는 맞았지만 1000이 틀렸다. 이전에 11726번을 풀다가 틀렸음에도 뭔 자신감인지 복습 안하고 풀었다가 당했다. 그때랑 비슷하게 당한거 같은데.. 앞으로는 이렇게 풀자.. 다이나믹 프로그래밍(DP)은 점화식이다.. -정답 #include "bits/stdc++.h" using na..