๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Coding Test/Algorithms

[Baekjoon] 1904.01ํƒ€์ผ/Java - Silver3

by The Future Engineer, Lucy 2024. 10. 15.
728x90
๋ฐ˜์‘ํ˜•

โ“๋ฌธ์ œ

https://www.acmicpc.net/problem/1904

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 22248 KB, ์‹œ๊ฐ„: 116 ms

๋ถ„๋ฅ˜

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

๋ฌธ์ œ ์„ค๋ช…

์ง€์›์ด์—๊ฒŒ 2์ง„ ์ˆ˜์—ด์„ ๊ฐ€๋ฅด์ณ ์ฃผ๊ธฐ ์œ„ํ•ด, ์ง€์›์ด ์•„๋ฒ„์ง€๋Š” ๊ทธ์—๊ฒŒ ํƒ€์ผ๋“ค์„ ์„ ๋ฌผํ•ด์ฃผ์…จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ฐ๊ฐ์˜ ํƒ€์ผ๋“ค์€ 0 ๋˜๋Š” 1์ด ์“ฐ์—ฌ ์žˆ๋Š” ๋‚ฑ์žฅ์˜ ํƒ€์ผ๋“ค์ด๋‹ค.
์–ด๋Š ๋‚  ์ง“๊ถ‚์€ ๋™์ฃผ๊ฐ€ ์ง€์›์ด์˜ ๊ณต๋ถ€๋ฅผ ๋ฐฉํ•ดํ•˜๊ธฐ ์œ„ํ•ด 0์ด ์“ฐ์—ฌ์ง„ ๋‚ฑ์žฅ์˜ ํƒ€์ผ๋“ค์„ ๋ถ™์—ฌ์„œ ํ•œ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ 00 ํƒ€์ผ๋“ค์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ฒฐ๊ตญ ํ˜„์žฌ 1 ํ•˜๋‚˜๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํƒ€์ผ ๋˜๋Š” 0ํƒ€์ผ์„ ๋‘ ๊ฐœ ๋ถ™์ธ ํ•œ ์Œ์˜ 00ํƒ€์ผ๋“ค๋งŒ์ด ๋‚จ๊ฒŒ ๋˜์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ง€์›์ด๋Š” ํƒ€์ผ๋กœ ๋” ์ด์ƒ ํฌ๊ธฐ๊ฐ€ N์ธ ๋ชจ๋“  2์ง„ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, N=1์ผ ๋•Œ 1๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , N=2์ผ ๋•Œ๋Š” 00, 11์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. (01, 10์€ ๋งŒ๋“ค ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค.) ๋˜ํ•œ N=4์ผ ๋•Œ๋Š” 0011, 0000, 1001, 1100, 1111 ๋“ฑ ์ด 5๊ฐœ์˜ 2์ง„ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์ง€์›์ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ€์ง“์ˆ˜๋ฅผ ์„ธ๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ ํƒ€์ผ๋“ค์€ ๋ฌดํ•œํžˆ ๋งŽ์€ ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•˜์ž.

 

โœ๐Ÿปํ’€์ด

'00'ํƒ€์ผ๊ณผ '1'ํƒ€์ผ๋งŒ์„ ์ด์šฉํ•˜์—ฌ 2์ง„ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ. ์ฆ‰, '01', '10'์€ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ.
N = 1์ผ ๋•Œ, '1'๋งŒ ๊ฐ€๋Šฅ. N = 2์ผ ๋•Œ, '00', '11' 2๊ฐœ ๊ฐ€๋Šฅ.
N = 3์ผ ๋•Œ, '100', '001', '111' 3๊ฐœ ๊ฐ€๋Šฅ.
์ด ๋•Œ, N = 3์ธ ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด '1'๊ณผ '11', '00'์œผ๋กœ ์กฐํ•ฉํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Œ.
๊ทธ๋Ÿฌ๋ฏ€๋กœ dp[3] = dp[2] + dp[1]์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Œ.
i๋กœ ๋ฐ”๊ฟ”๋ณด๋ฉด dp[i] = dp[i - 1] + dp[i - 2]๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ’ป์ฝ”๋“œ

import java.io.*;

public class Main {

    static int n;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        n = Integer.parseInt(br.readLine());

        long[] dp = new long[1000001];
        dp[0] = 0;
        dp[1] = 1;
        dp[2] = 2;
        
        for(int i = 3; i <= n; i++)
            dp[i] = (dp[i - 1] + dp[i - 2]) % 15746;

        bw.write(String.valueOf(dp[n]));
        bw.flush();
        bw.close();
        br.close();
    }
}
728x90
๋ฐ˜์‘ํ˜•