본문 바로가기

전체 글13

백준 11726 : 2×n 타일링 - C++ 어제 소개해드렸던 9095번 : 1, 2, 3 더하기와 비슷한 문제입니다. 경우의 수들을 나열해서 적어보고 적절한 점화식을 찾아봅시다! 더보기 편의상 가로 길이가 1인 타일을 하나 배치하는 경우를 1로, 가로 길이가 2인 타일을 위 아래 두 개 배치하는 경우를 2로, 명칭하도록 하겠습니다. 2x1 직사각형에 타일을 채우는 경우 : 1 2x2 직사각형에 타일을 채우는 경우 : 1, 1 / 2 2x3 직사각형에 타일을 채우는 경우 : 1, 2 / 1, 1, 1 / 2, 1 2x4 직사각형에 타일을 채우는 경우 : 1, 1, 2 / 2, 2 / 1, 2, 1 / 1, 1, 1, 1 / 2, 1, 1 힌트가 보이시나요? 2x3의 경우, 2x1 경우의 오른쪽에 2를 더한 것과 2x2 경우의 오른쪽에 1을 더한 것.. 2023. 2. 5.
백준 9095 : 1, 2, 3 더하기 - C++ 1, 2, 3 갯수를 일일히 구하는 것은 비효율적인 접근이겠습니다. 1부터 n을 하나씩 늘려가면서 n을 1, 2, 3의 합으로 나타낼 수 있는 경우들을 직접 적어보고 적절한 점화식을 찾아봅시다. 더보기 n이... 1 인 경우 - 1 2 인 경우 - 1, 1 / 2 3 인 경우 - 1, 1, 1 / 1, 2 / 2, 1 / 3 4 인 경우 - 1, 3 / 1, 1, 2 / 2, 2 / 1, 1, 1, 1 / 1, 2, 1 / 2, 1, 1 / 3, 1 위 경우들을 살펴보면, n이 1인 방법의 뒤에 3을 붙이고, 2인 방법들의 뒤에 2를 붙이고, 3인 방법들의 뒤에 1을 붙이면 n이 4인 방법들을 완성할 수 있다는 규칙이 보입니다. 즉, A(n)이 n을 1, 2, 3의 합으로 나타낼 수 있는 경우의 수라고 .. 2023. 2. 4.
백준 15829 : Hashing - C++ 나머지 연산(mod)은 분배가 가능하다는 점을 다시 되새기고 갑시다. $$ (A+B) \bmod M=(A\bmod M+B \bmod M) \bmod M $$ $$ (A*B) \bmod M=(A\bmod M*B \bmod M) \bmod M $$ $$ (A-B) \bmod M=(A\bmod M-B \bmod M + M) \bmod M $$ A - B의 나머지를 연산하는 과정에서 자칫 음수가 나올 수 있으므로 M을 더해주었습니다. 더보기 #include #include using namespace std; int main() { cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false); int l, temp; long long res = 0; long.. 2023. 2. 2.
백준 26007번 : Codepowers - C++ 제가 다니고 있는 대학 프로그래밍 경진대회에 출제되었던 문제입니다. 대회 중에는 시간초과로 결국 해결하지 못했었던 것 같은데, 이번에 다시 풀어보았습니다. 첫째 줄에 N, M, K, X 정수가 주어지고, 둘째 줄에는 N개의 정수가 주어지는데, 차례대로 직전 라운드 대비 점수가 얼마나 증감되었는지에 대한 값입니다. 세번째 줄부터는 M줄에 거쳐 몇 라운드부터 몇 라운드 직전까지 K보다 낮은 점수를 받았던 횟수가 얼마인지에 대한 정보가 주어집니다. 중복 계산을 최대한 줄이기 위해 둘째 줄에 주어진 정보를 가공하기로 했습니다. 문제 해결에 있어서 점수 그 자체는 그다지 중요하지 않고, 다만 K보다 점수가 높은지, 낮은지에 대한 정보만 필요하다는 점을 고려합니다. 더보기 두 라운드 간의 점수를 비교하기만 하면 되.. 2023. 2. 1.