diff --git "a/leetcode3/\354\235\264\354\247\204\355\235\254/1411. Number of Ways to Paint N \303\227 3 Grid.java" "b/leetcode3/\354\235\264\354\247\204\355\235\254/1411. Number of Ways to Paint N \303\227 3 Grid.java" new file mode 100644 index 00000000..6bf16752 --- /dev/null +++ "b/leetcode3/\354\235\264\354\247\204\355\235\254/1411. Number of Ways to Paint N \303\227 3 Grid.java" @@ -0,0 +1,85 @@ +/* 2차 풀이 + +1. 아이디어 : DP로 풀이 3가지 색깔을 겹치치않게 사용할 경우 패턴은 ABA와 ABC 존재 + 각 ABA -> ABC, ABA -> ABA, ABC -> ABC, ABC -> ABA 경우의 수를 각각 구해 dp로 계산 + 이때 2차원 DP를 따로 선언하지 않음(직전 상태값만 필요하므로) - 3ms + +2. 시간복잡도 : O(N) + +3. 자료구조/알고리즘 : DP + + */ + +class Solution { + public int numOfWays(int n) { + // 인접한 칸이 같은 색이면 안됨 + // 10^9 + 7의 나머지 + + int MOD = 1_000_000_000 + 7; + + // ABA = 6 + // ABC = 6 + + // ABA -> BAB, CAC, BCB (3) + // ABA -> BAC, CAB (2) + // ABC -> BCA, CAB (2) + // ABC -> BAB, BCB (2) + + long aba = 6;; + long abc = 6; + + for(int i=1; i ABC, ABA -> ABA, ABC -> ABC, ABC -> ABA 경우의 수를 각각 구해 dp로 계산 + 6ms 소요 + +2. 시간복잡도 : O(N) + +3. 자료구조/알고리즘 : DP + + */ + +class Solution { + public int numOfWays(int n) { + // 인접한 칸이 같은 색이면 안됨 + // 10^9 + 7의 나머지 + + int MOD = 1_000_000_000 + 7; + + // ABA = 6 + // ABC = 6 + + // ABA -> BAB, CAC, BCB (3) + // ABA -> BAC, CAB (2) + // ABC -> BCA, CAB (2) + // ABC -> BAB, BCB (2) + + long[][] dp = new long[2][n]; + // ABA + dp[0][0] = 6; + // ABC + dp[1][0] = 6; + + for(int i=1; i