๐ŸŽจ ์ดˆ๋ณด์ž ์นœํ™” ๊ฐ€์ด๋“œ 'Number of Ways to Paint N 3 Grid' โ€“ LeetCode 1411 (C++, Python, JavaScript)

๋ฐœํ–‰: (2026๋…„ 1์›” 3์ผ ์˜คํ›„ 12:13 GMT+9)
4 min read
์›๋ฌธ: Dev.to

Source: Dev.to

Cover image for ๐ŸŽจ Beginnerโ€‘Friendly Guide โ€˜Number of Ways to Paint N 3 Gridโ€™ โ€“ LeetCode 1411 (C++, Python, JavaScript)

Problem Summary

์ฃผ์–ด์ง„ ์กฐ๊ฑด:

  • n ํ–‰, 3 ์—ด์ธ ๊ฒฉ์ž.
  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ‰์€ ๋นจ๊ฐ•, ๋…ธ๋ž‘, ์ดˆ๋ก ์ด 3๊ฐ€์ง€.
  • ์ธ์ ‘ํ•œ ๋‘ ์…€(๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ)์€ ๊ฐ™์€ ์ƒ‰์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค๋Š” ๊ทœ์น™.

grid illustration

๋ชฉํ‘œ

  • ์ „์ฒด ๊ฒฉ์ž๋ฅผ ์ƒ‰์น ํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ๋Š” (10^9+7) ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Intuition

๊ฐ ํ–‰์— ์…€์€ 3๊ฐœ๋ฟ์ด๋ฏ€๋กœ, ๋ชจ๋“  ์œ ํšจํ•œ ํ–‰์€ ๋‘ ๊ฐ€์ง€ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์— ์†ํ•œ๋‹ค:

ํŒจํ„ด์„ค๋ช…๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ ์ˆ˜
ABA์ฒซ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ ์…€์€ ๊ฐ™์€ ์ƒ‰, ๊ฐ€์šด๋ฐ ์…€์€ ๋‹ค๋ฅธ ์ƒ‰ (์˜ˆ: ๋นจ๊ฐ•โ€‘๋…ธ๋ž‘โ€‘๋นจ๊ฐ•)6
ABC์„ธ ์…€ ๋ชจ๋‘ ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ‰ (์˜ˆ: ๋นจ๊ฐ•โ€‘๋…ธ๋ž‘โ€‘์ดˆ๋ก)6

ํ–‰ i ์•„๋ž˜์— ํ–‰ iโ€ฏ+โ€ฏ1 ์„ ๋†“์„ ๋•Œ, ๊ธฐ์กด ํ–‰์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ์ƒˆ ํ–‰์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์„ธ๋ฉด:

  • ABA ํ–‰ ์•„๋ž˜: ๊ฐ€๋Šฅํ•œ ABA ํ–‰ 3๊ฐ€์ง€, ๊ฐ€๋Šฅํ•œ ABC ํ–‰ 2๊ฐ€์ง€.
  • ABC ํ–‰ ์•„๋ž˜: ๊ฐ€๋Šฅํ•œ ABA ํ–‰ 2๊ฐ€์ง€, ๊ฐ€๋Šฅํ•œ ABC ํ–‰ 2๊ฐ€์ง€.

ABA์™€ ABC ํ–‰์˜ ๊ฐœ์ˆ˜๋งŒ ์œ ์ง€ํ•˜๊ณ  ๊ฐ ์ถ”๊ฐ€ ํ–‰๋งˆ๋‹ค ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์„ ํ˜• ์‹œ๊ฐ„ ํ•ด๊ฒฐ์ฑ…์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

Code Blocks

C++

class Solution {
public:
    int numOfWays(int n) {
        constexpr int kMod = 1000000007;
        long color2 = 6; // ABA patterns
        long color3 = 6; // ABC patterns

        for (int i = 1; i < n; ++i) {
            long next_color2 = (color2 * 3 + color3 * 2) % kMod;
            long next_color3 = (color2 * 2 + color3 * 2) % kMod;
            color2 = next_color2;
            color3 = next_color3;
        }
        return (color2 + color3) % kMod;
    }
};

Python

k_mod = 10**9 + 7
# color2 = ABA patterns, color3 = ABC patterns
color2 = 6
color3 = 6

for _ in range(1, n):
    next_color2 = (color2 * 3 + color3 * 2) % k_mod
    next_color3 = (color2 * 2 + color3 * 2) % k_mod
    color2, color3 = next_color2, next_color3

result = (color2 + color3) % k_mod

JavaScript

/**
 * @param {number} n
 * @return {number}
 */
var numOfWays = function(n) {
    const kMod = 1000000007n; // BigInt for safety
    let color2 = 6n; // ABA
    let color3 = 6n; // ABC

    for (let i = 1; i < n; i++) {
        const nextColor2 = (color2 * 3n + color3 * 2n) % kMod;
        const nextColor3 = (color2 * 2n + color3 * 2n) % kMod;
        color2 = nextColor2;
        color3 = nextColor3;
    }

    return Number((color2 + color3) % kMod);
};

Key Takeaways

  • State Reduction: ํ–‰ ๊ตฌ์„ฑ์„ ABA์™€ ABC ํŒจํ„ด์œผ๋กœ ๋ฌถ์Œ์œผ๋กœ์จ ๊ฐœ๋ณ„ ์ƒ‰ ์กฐํ•ฉ์„ ๋ชจ๋‘ ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • Linear Time Complexity: ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ O(n) ์‹œ๊ฐ„์— ๋™์ž‘ํ•˜๋ฉฐ ํ–‰์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•œ๋‹ค.
  • Modulo Arithmetic: ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ์ ์šฉํ•ด ์นด์šดํŠธ๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ปค์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

Final Thoughts

์ด ๋ฌธ์ œ๋Š” ์ƒํƒœ ์ „์ด ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šฐ๊ธฐ์— ํ›Œ๋ฅญํ•œ ์ž…๋ฌธ ์‚ฌ๋ก€์ด๋‹ค. ์ธ์ ‘ํ•œ ๊ฐœ์ฒด๊ฐ€ ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•˜๋Š” ์ž์› ์Šค์ผ€์ค„๋ง์ด๋‚˜ ์ง€๋„ ์ƒ‰์น  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ ์‹ค์ œ ์ƒํ™ฉ์—์„œ๋„ ๋น„์Šทํ•œ ํŒจํ„ด ์นด์šดํŒ… ๊ธฐ๋ฒ•์ด ๋“ฑ์žฅํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์นด์šดํŒ… ๋ฌธ์ œ๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๋Š” ๊ฒƒ์€ ์ตœ๊ณ  ์ˆ˜์ค€ ๊ธฐ์—…์˜ ๊ธฐ์ˆ  ๋ฉด์ ‘์„ ์„ฑ๊ณต์ ์œผ๋กœ ํ†ต๊ณผํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋œ๋‹ค.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

๐ŸŽฏ ์ดˆ๋ณด์ž์šฉ ๊ฐ€์ด๋“œ 'N-Repeated Element in Size 2N Array' โ€“ LeetCode 961 (C++ | Python | JavaScript)

๋ฌธ์ œ ์„ค๋ช… ๊ธธ์ด๊ฐ€ 2N์ธ ๋ฐฐ์—ด nums๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋ฐฐ์—ด์—๋Š” N + 1๊ฐœ์˜ ๊ณ ์œ ํ•œ ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ์š”์†Œ๊ฐ€ N๋ฒˆ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ...

[BOJ/C, C++] ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ธฐ / ์ž…์ถœ๋ ฅ๊ณผ ์‚ฌ์น™์—ฐ์‚ฐ ~ 1์ฐจ์› ๋ฐฐ์—ด

1008๋ฒˆ A/B ๋ฌธ์ œ ๋งํฌ c include int main { double A, B; scanf'%lf %lf', &A, &B; printf'%.9lf', A / B; } ์†Œ์ˆ˜์  ์•„๋ž˜ 9์ž๋ฆฌ ์ด์ƒ์„ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. float๋Š” ์•ฝ 6์ž๋ฆฌ๋งŒ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•˜๋ฏ€๋กœ double์„ ์‚ฌ์šฉ...