Coding Test

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 12914: ๋ฉ€๋ฆฌ ๋›ฐ๊ธฐ - ๋ฌธ์ œ ํ’€์ด ์ ‘๊ทผ๋ฒ• ๋ฐ ์ž๋ฐ” ์ •๋‹ต ํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2024. 8. 19.

https://school.programmers.co.kr/learn/courses/30/lessons/12914

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

ํšจ์ง„์ด๋Š” ๋ฉ€๋ฆฌ ๋›ฐ๊ธฐ๋ฅผ ์—ฐ์Šตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํšจ์ง„์ด๋Š” ํ•œ๋ฒˆ์— 1์นธ, ๋˜๋Š” 2์นธ์„ ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์นธ์ด ์ด 4๊ฐœ ์žˆ์„ ๋•Œ, ํšจ์ง„์ด๋Š”
(1์นธ, 1์นธ, 1์นธ, 1์นธ)
(1์นธ, 2์นธ, 1์นธ)
(1์นธ, 1์นธ, 2์นธ)
(2์นธ, 1์นธ, 1์นธ)
(2์นธ, 2์นธ)
์˜ 5๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋งจ ๋ ์นธ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ€๋ฆฌ๋›ฐ๊ธฐ์— ์‚ฌ์šฉ๋  ์นธ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์งˆ ๋•Œ, ํšจ์ง„์ด๊ฐ€ ๋์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช‡ ๊ฐ€์ง€์ธ์ง€ ์•Œ์•„๋‚ด, ์—ฌ๊ธฐ์— 1234567๋ฅผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด 4๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค๋ฉด, 5๋ฅผ returnํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ œํ•œ ์‚ฌํ•ญ

n์€ 1 ์ด์ƒ, 2000 ์ดํ•˜์ธ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ ์ ‘๊ทผ๋ฐฉ๋ฒ•

์ด ๋ฌธ์ œ๋ฅผ ์ ‘ํ–ˆ์„ ๋•Œ ์ฒ˜์Œ์—” n ์ด๋ž€ ํƒ€์ผ“์„ ๊ฐ€์ ธ์„œ 1111 ,121, 112, 211 ์ฒ˜๋Ÿผ ์ˆœ์—ด๊ณผ ๊ฐ™์€ dfs ๋กœ ํ’€์–ด์•ผํ•˜๋‚˜, ๊ณ ๋ฏผ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ œํ•œ์‚ฌํ•ญ์„ ๋ณด๋ฉด n ์€ 2000 ์ด๊ณ  ์ด๋Ÿฐ ์‹œ๋„๋Š” ์ž˜ ๋ชป๋œ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์—ˆ์ฃ .

 

์ด ๋ฌธ์ œ๋Š” ํ’€์ด๋ฒ•์€ ์•„์ฃผ ์‰ฌ์šด ๋ฌธ์ œ์ด์ง€๋งŒ, ์ด ํ’€์ด๋ฒ•์„ ๋– ์˜ฌ๋ฆฌ๋Š” ๊ฒŒ ๋” ์–ด๋ ค์šด ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋จผ์ € ๋ฌธ์ œ ํ’€์ด ์ ‘๊ทผ๋ฒ•์„ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด, ์ด ๋ฌธ์ œ๋Š” dp๋กœ ํ’€์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. 

 

DP๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜ ์˜ˆ์‹œ
1. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ n๋ฒˆ์งธ ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๋•Œ F(n) = F(n-1) + F(n-2) ํ˜•ํƒœ๋กœ ์ •์˜๋˜๋ฉฐ, DP๋กœ ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2. ์ตœ์†Œ ๊ฒฝ๋กœ ๋ฌธ์ œ: ์˜ˆ๋ฅผ ๋“ค์–ด, 2์ฐจ์› ๊ฒฉ์ž์—์„œ ์ขŒ์ƒ๋‹จ์—์„œ ์šฐํ•˜๋‹จ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ์ตœ์†Œ ๋น„์šฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋Š” DP๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3. ๋™์ „ ๊ตํ™˜ ๋ฌธ์ œ: ์ฃผ์–ด์ง„ ๊ธˆ์•ก์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ ๋™์ „์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋„ DP๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ์ค‘ ์ด๋ฌธ์ œ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ํ™œ์šฉํ•˜์—ฌ ํ’€์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

ํ’€์ด์˜ ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

dp[n] = dp[n-1] + dp[n-2]

 

ํšจ์ง„์ด๊ฐ€ n๋ฒˆ์งธ ์นธ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

1. n-1๋ฒˆ์งธ ์นธ์—์„œ 1์นธ ๋›ฐ์–ด์„œ ๋„์ฐฉํ•œ ๊ฒฝ์šฐ
2. n-2๋ฒˆ์งธ ์นธ์—์„œ 2์นธ ๋›ฐ์–ด์„œ ๋„์ฐฉํ•œ ๊ฒฝ์šฐ
์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ํ•ฉ์น˜๋ฉด, n๋ฒˆ์งธ ์นธ์— ๋„๋‹ฌํ•˜๋Š” ์ด ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ n๋ฒˆ์งธ ์นธ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” dp[n-1] (1์นธ ๋›ฐ๊ธฐ)์™€ dp[n-2] (2์นธ ๋›ฐ๊ธฐ)์˜ ํ•ฉ์ž…๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ํšจ์ง„์ด๊ฐ€ 4๋ฒˆ์งธ ์นธ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 3๋ฒˆ์งธ ์นธ์—์„œ ํ•œ ์นธ ์›€์ง์ด๋Š” ๋ฐฉ๋ฒ•๊ณผ 2๋ฒˆ์งธ ์นธ์—์„œ ๋‘ ์นธ ์›€์ง์ด๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •๋‹ต ํ’€์ด

class Solution {
    public int solution(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        
        for (int i = 3; i <= n; i++) {
            dp[i] = (dp[i - 1] + dp[i - 2]) % 1234567;
        }
        
        return dp[n];
    }
}

 

๋จผ์ € n์ด 2000 ์ดํ•˜ ์ž์—ฐ์ˆ˜์ด๋ฏ€๋กœ 1๊ณผ 2์ผ๋•Œ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. ์ ํ™”์‹์€ n -1 ๊ณผ n - 2๋กœ ์„ธ์šฐ๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ์ˆ˜๊ฐ€ 3์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ n์ด 3์ด์ƒ 2000์ดํ•˜์˜€๋‹ค๋ฉด ์ด ๊ณผ์ •์ด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜๋ณต๋ฌธ์—์„  ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์ด ์“ฐ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฐ’์„ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€์™€ ๋˜ ๊ทธ ๋‚˜๋จธ์ง€๋ฅผ ๋”ํ•˜๋ฉด ๋‘ ์ˆ˜๋ฅผ ๋”ํ•œ ๊ฒƒ๊ณผ ์–ด๋–ค ๊ฐ’์„ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ ๊ฐ™์•„์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

9 % 5 = 4
19 % 5 = 4

28 % 5 = 8 % 5

 

๋‚˜๋จธ์ง€ 4์™€ ๋‚˜๋จธ์ง€ 4๋ฅผ ๋”ํ•˜๊ณ  ๋‹ค์‹œ 5๋กœ ๋‚˜๋ˆ„์–ด๋„ 9์™€ 19์˜ ํ•ฉ์„ 5๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€์™€ ๊ฐ™์•„์ง€์ฃ .

์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜์‹œ๋Š” ๋ถ„์€ ๊ตฌ๊ธ€์— ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ๊ฒ€์ƒ‰ํ•ด๋ณด์‹œ๋ฉด ๋”์šฑ ์ž์„ธํ•œ ์„ค๋ช…์„ ์ฐพ์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ •๋‹ต ํ’€์ด๋Š” ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•˜์ฃ ? ํ•˜์ง€๋งŒ ์ด ํ’€์ด๋ฅผ ์ €๋„ ์ฒจ์—” ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ•˜์—ฌ ๋ฆฌ๋งˆ์ธ๋“œํ•  ๊ฒธ ์ด๋ ‡๊ฒŒ ๊ธ€์„ ๋‚จ๊ฒจ๋ด…๋‹ˆ๋‹ค.

 

 

 

 

์ด ๋ฌธ์ œ์™€ ์™„์ „ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ๋Š”๋ฐ, ๊ฐ™์ด ์ฒจ๋ถ€ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋กœ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์‹œ๋„ํ•ด๋ณด์„ธ์š”.

https://school.programmers.co.kr/learn/courses/30/lessons/12900

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋Œ“๊ธ€