728x90
0. [c++] 백준 - |
https://www.acmicpc.net/problem/12796
1. 풀이 |
이게 수학적으로 접근을 하면 정말정말정~말 쉽게 풀 수 있는 문제였다.
하지만, 나의 머리로는 이러한 아이디어가 나오지 않았기에.... 다른 블로그를 참조하였다.
우선, 출처는 https://blog.encrypted.gg/138를 보고 참고하였다.
정말 단순하게 접근하여 3개의 행렬을 가지는 배열을 만들어보겠다.
(1*1), (1*1), (1*k)라는 3개의 행렬이 만들어졌다.
이 3개의 행렬의 곱셈의 횟수가 어떻게 되는지 분석해보자.
1) 1*1*1 + 1*1*k = 1+k
2) 1*1*k + 1*1*k = 2k
딱 두가지의 경우가 생기게 된다. 이때, 구하는 값은 큰 값에서 작은 값을 빼는 것이므로,
K>2인 경우, 2k - (1+k) = k -1이 되게 된다.
이때, 조금만 값을 수정하여 k 대신 k+1이란 값을 대입하면, 2(k+1) - (1+k+1) = k라는 아름다운 값을 구해낼 수 있었다.
이러한 점을 활용하여 코드를 만들면 완성이다.
2. 소스코드 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include<iostream> using namespace std; void matrix(int K) { cout << 3 << endl; cout << "1 1 1 " << K + 1; } int main() { int K; cin >> K; matrix(K); return 0; } | cs |
3. 참고 |
질문이나 지적 있으시면 댓글로 남겨주세요~
도움 되셨으면 하트 꾹!
'<백준> > |C++| hard' 카테고리의 다른 글
[c++] 백준 1038 - 감소하는 수(비트마스크, brute force) (0) | 2019.05.04 |
---|---|
[c++] 백준 11778 - 피보나치 수와 최대공약수 (0) | 2019.05.01 |
[c++] 백준 1015 - 수열 정렬 (0) | 2019.04.30 |
[c++] 백준 6549 - 히스토그램에서 가장 큰 직사각형 (0) | 2019.04.27 |
[c++] 백준 1780 - 종이의 개수(string의 치환, 공백 포함 입력(getline), replaceall, erase, remove, string활용 전체적으로) (0) | 2019.04.25 |