반응형
문제
- 문제 링크: 2xn 타일링
해설
- 자료구조:
- 시간복잡도:
(풀이과정)
1)
2)
3)
4)
코드
(C언어)
solution 1)
더보기
solution 1
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(C++)
solution 1)
더보기
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
std::vector<int> v = {1,2};
if (n == 1)
return 1;
for (int i = 2; i < n; ++i)
{
int tmp = v[i-2] + v[i-1];
v.push_back(tmp % 1000000007);
}
answer = v[n-1];
return answer;
}
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(C#)
solution 1)
더보기
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(Java)
solution 1)
- N: 가로의 길이
- 가로 길이가 1 또는 2인 경우: O(1)
- 반복문은 N - 2번 수행: O(N)
- 최종 시간 복잡도: O(N)
더보기
class Solution {
public int solution(int n) {
// 동적계획법을 위한 배열 초기화
// dp[i]는 가로 길이가 i일 때 바닥을 채우는 방법의 수
int[] dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
// 가로 길이가 3부터 n까지의 각각의 경우에 대해 바닥을 채우는 방법의 수를 구함
for (int i = 3; i <= n; ++i) {
// dp[i] = dp[i - 1] + dp[i - 2]
dp[i] = (dp[i - 1] + dp[i - 2]) % 1_000_000_007;
}
// 바닥의 가로 길이가 n일 때 바닥을 채우는 방법의 수인 dp[n]을 반환
return dp[n];
}
}
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(Python)
solution 1)
- N: 가로의 길이
- 가로 길이가 1 또는 2인 경우를 처리: O(1)
- 반복문은 N - 2번 수행: O(N)
- 최종 시간 복잡도: O(N)
더보기
def solution(n):
# 바닥의 가로 길이가 1인 경우, 바닥을 채우는 방법의 수는 1
if n == 1:
return 1
# 바닥의 가로 길이가 2인 경우, 바닥을 채우는 방법의 수는 2
if n == 2:
return 2
# 동적 계획법을 위한 리스트 초기화
# dp[i]는 가로 길이가 i일 때 바닥을 채우는 방법의 수
dp = [0] * (n + 1)
dp[1] = 1
dp[2] = 2
# 가로 길이가 3부터 n까지의 각각의 경우에 대해 바닥을 채우는 방법의 수를 구함
for i in range(3, n + 1):
# dp[i]는 dp[i-1]과 dp[i-2]를 더한 값
dp[i] = (dp[i-1] + dp[i-2]) % 1000000007
# 바닥의 가로 길이가 n일 때 바닥을 채우는 방법의 수인 dp[n]을 반환
return dp[n]
solution 2)
더보기
def solution(n):
answer = 0
a, b = 1, 2
for i in range(1, n):
a, b = b, (a+b)%1000000007
return a
solution 3)
더보기
import
(JavaScript)
solution 1)
- N: 가로의 길이
- 가로 길이가 1 또는 2인 경우: O(1)
- 반복문은 N - 2번 수행하므로 O(N)
- 최종 시간 복잡도: O(N)
더보기
// 시간 초과 문제
function solution(n) {
// 바닥의 가로 길이가 1인 경우, 바닥을 채우는 방법의 수는 1
if (n === 1) {
return 1;
}
// 바닥의 가로 길이가 2인 경우, 바닥을 채우는 방법의 수는 2
if (n === 2) {
return 2;
}
// 동적 계획법을 위한 배열 초기화. dp[i]는 가로 길이가 i일 때 바닥ㅇ르 채우는 방법의 수
const dp = Array(n + 1).fill(0);
dp[1] = 1;
dp[2] = 2;
// 가로 길이가 3부터 n까지의 각각의 경우에 대해 바닥을 채우는 방법의 수를 구함
for (let i = 3; i <= n; ++i) {
// dp[i]는 dp[i-1]과 dp[i-2]를 더한 값
dp[i] = (dp[i - 1] + dp[i - 2]) %1000000007;
}
// 바닥의 가로 길이가 n일 때 바닥을 채우는 방법의 수인 dp[n]을 반환
return dp[n];
}
function solution(n) {
let a = 1;
let b = 2;
for (let i = 2; i < n; i += 1) {
const temp = b;
b = (a + b) % 1000000007;
a = temp;
}
return b;
}
solution 2)
더보기
import
solution 3)
더보기
import
반응형
'1-4. 코딩테스트 문제집(진행중) > PCCP(Lv2)' 카테고리의 다른 글
[PCCP] Lv2: 가장 큰 정사각형 찾기(12905) 해설 (0) | 2024.12.26 |
---|---|
[PCCP] Lv2: 땅따먹기(12913) 해설 (2) | 2024.12.26 |
[PCCP] Lv2: 피보나치수(12945) 해설 (0) | 2024.12.25 |
[PCCP] Lv2: 귤 고르기(138476) 해설 (0) | 2024.12.25 |
[PCCP] Lv2: 구명보트(42885) 해설 (0) | 2024.12.25 |