[leetcode] 276. Paint Fence 문제 해결 보고서

1222 단어 LeetCode동적 기획
제목 링크:https://leetcode.com/problems/paint-fence/
There is a fence with n posts, each post can be painted with one of the k colors.
You have to paint all the posts such that no more than two adjacent fence posts have the same color.
Return the total number of ways you can paint the fence.
Note: n and k are non-negative integers.
사고방식: 원래 서로 인접한 두 개는 같은 색깔로 염색할 수 없다고 생각했는데, 나중에 보니 연속할 수 없는 세 개는 같은 색깔이다.알이 아픈 문제야.
매번 두 가지 상황이 있다.
1. 현재 이 색상이 전번과 같다면 전번과 전번 메일박스 색상이 다르다. 이 경우 염색 방안은 전번과 전번이 다른 색상일 때의 개수이다.
2. 현재의 메일박스 색깔이 이전과 다르다면 그 염색 방안은 이전 메일박스가 이 색깔의 염색 방안의 합이 아니다. 즉, (k-1)*sum
이렇게 해서 우리는 모든 메일박스에서 한 가지 색을 염색하는 방안을 계산한다. 왜냐하면 k개의 염색 방안이 있기 때문에 마지막에 k를 곱한다.
코드는 다음과 같습니다.
class Solution {
public:
    int numWays(int n, int k) {
        if(n == 0 || k == 0) return 0;
        if(n <= 2) return pow(k, n);
        int same = 1, notSame = k-1;
        for(int i = 2; i< n; i++)
        {
            int tem = same;
            same = notSame;
            notSame = (tem + notSame)*(k-1);
        }
        return (same + notSame)*k;
    }
};

참조:https://leetcode.com/discuss/56172/c-implementation-constant-memory-and-o-n-time

좋은 웹페이지 즐겨찾기