본문 바로가기

전체 글

(56)
[코드업] 3721 - 블럭 채우기 7 2∗1의 직사각형 블럭을 이용하여 3∗n 크기의 직사각형 모양으로 채우려고 한다. 가능한 방법의 수를 구하여라. 2∗1 직사각형 블럭은 무한정 있다고 가정한다. 이 때 숫자가 커질 수 있으므로 100,007로 나눈 나머지를 출력하시오. #include using namespace std; const int DIV = 100007; int dp[10001] = {0, 0, 3,}; int block(int n){ if(dp[n] != 0) return dp[n]; if(n % 2 == 1) return dp[n] = 0; int sum = 0; for(int i = 2; i < n - 1; i += 2){ if(i == 2) sum += block(n - i) * 3; else sum += block(n ..
[코드업] 3719 - 블럭 채우기 6 2∗1과 1∗1의 사각형 블럭을 이용하여 2∗n 크기의 직사각형 모양으로 채우려고 한다. 가능한 방법의 수를 구하여라. 사각형 블럭은 무한정 있다고 가정한다. 이 때 숫자가 커질 수 있으므로 100,007로 나눈 나머지를 출력하시오. #include using namespace std; const int DIV = 100007; int dp[10001] = {0, 2, 7,}; int block(int n){ if(dp[n] != 0) return dp[n]; int sum = 0; for(int i = 1; i < n; i++){ if(i == 2) sum += block(n - i) * 3; else sum += block(n - i) * 2; } return dp[n] = (sum + 2) % DI..
[코드업] 3716 - 블럭 채우기 5 3∗1∗1블럭과 3∗2∗1 블럭을 이용해서 3∗n∗1블럭 판을 맞추려고 한다. 가능한 모든 가짓수를 1,000으로 나눈 나머지를 구해보자 #include using namespace std; const int DIV = 1000; int dp[10001] = {0, 1, 2, 6,}; int block(int n){ if(dp[n] != 0) return dp[n]; return dp[n] = (block(n - 3) * 3 % DIV + block(n - 2) % DIV + block(n - 1) % DIV) % DIV; } int main(){ int N; cin >> N; cout
[코드업] 3714 - 블럭 채우기 4 'ㄱ'자 모양 블럭과 1∗1의 직사각형 블럭을 이용하여 2∗n 크기의 직사각형 모양으로 채우려고 한다. 가능한 방법의 수를 구하여라. 블럭은 무한정 있다고 가정한다. 이 때 숫자가 커질 수 있으므로 100,007로 나눈 나머지를 출력하시오. #include using namespace std; const int DIV = 100007; int dp[10001] = {0, 1, 5, 11,}; int block(int n){ if(dp[n] != 0) return dp[n]; return dp[n] = (block(n - 3) * 2 % DIV + block(n - 2) * 4 % DIV + block(n - 1) % DIV) % DIV; } int main(){ int N; cin >> N; cout
[코드업] 3712 - 블럭 채우기 3 2∗1과 2∗2 크기의 사각형 블럭을 이용하여 2∗n 크기의 직사각형 모양으로 채우려고 한다. 가능한 방법의 수를 구하여라. 두 사각형 블럭은 무한정 있다고 가정한다. 이 때 숫자가 커질 수 있으므로 100,007로 나눈 나머지를 출력하시오. #include using namespace std; const int DIV = 100007; int dp[10001] = {1, 1,}; int block(int n){ if(dp[n] != 0) return dp[n]; return dp[n] = (block(n - 1) + block(n - 2) * 2) % DIV; } int main(){ int n; cin >> n; cout
[코드업] 3712 - 블럭 채우기 2 다음과 같은 'ㄱ'자 모양의 블럭이 있다. 이 블럭을 이용하여 2∗n 크기의 직사각형 모양으로 채우려고 한다. 가능한 방법의 수를 구하여라. 'ㄱ'자 블럭은 무한정 있다고 가정한다. 이 때 숫자가 커질 수 있으므로 100,000,007로 나눈 나머지를 출력하시오. #include using namespace std; const int DIV = 100000007; int dp[10001] = {0, 0, 0, 2,}; int block(int n){ if(dp[n] != 0) return dp[n]; if(n == 1 || n == 2) return 0; return dp[n] = (block(n - 3) * 2) % DIV; } int main(){ int N; cin >> N; cout
[코드업] 3709 - 블럭 채우기 1 2∗1의 직사각형 블럭을 이용하여 2∗n 크기의 직사각형 모양으로 채우려고 한다. 가능한 방법의 수를 구하여라. 2∗1 직사각형 블럭은 무한정 있다고 가정한다. 이 때 숫자가 커질 수 있으므로 100,000,007로 나눈 나머지를 출력하시오. #include using namespace std; const int DIV = 100000007; int dp[10001] = {0, 1, 2,}; int block(int n){ if(dp[n] != 0) return dp[n]; return dp[n] = (block(n - 2) + block(n - 1)) % DIV; } int main(){ int N; cin >> N; cout
[코드업] 3021 - 큰 수 덧셈 두 큰 수(BigInteger)에 대해서는 숫자를 문자열로 받아와 뒤집어서 처음부터 마지막까지 모조리 한 자리씩 더한 다음에, 10이 넘는 자리마다 자리올림을 수행해주면 된다. #include #include #include #include using namespace std; vector zeroJustify(vector str) { vector::iterator f_iter; for (auto iter = str.end() - 1; iter >= str.begin(); iter--) { if (*iter != 0) { f_iter = iter; break; } if (iter == str.begin() && *iter == 0) { f_iter = str.begin(); break; } } str.e..