[Algorithm] ๐Ÿ”๋ฐฑ์ค€ 2011 ์•”ํ˜ธ ์ฝ”๋“œ

HaJingJingยท2021๋…„ 6์›” 21์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
78/119

0. ๋ฌธ์ œ

์ƒ๊ทผ์ด์™€ ์„ ์˜์ด๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋‚จ๋งค๊ฐ„์˜ ๋Œ€ํ™”๋ฅผ ๋“ฃ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋Œ€ํ™”๋ฅผ ์„œ๋กœ ์•”ํ˜ธํ™” ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋Œ€ํ™”๋ฅผ ํ–ˆ๋‹ค.

์ƒ๊ทผ: ๊ทธ๋ƒฅ ๊ฐ„๋‹จํžˆ ์•”ํ˜ธํ™” ํ•˜์ž. A๋ฅผ 1์ด๋ผ๊ณ  ํ•˜๊ณ , B๋Š” 2๋กœ, ๊ทธ๋ฆฌ๊ณ  Z๋Š” 26์œผ๋กœ ํ•˜๋Š”๊ฑฐ์•ผ.
์„ ์˜: ๊ทธ๋Ÿผ ์•ˆ๋ผ. ๋งŒ์•ฝ, "BEAN"์„ ์•”ํ˜ธํ™”ํ•˜๋ฉด 25114๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ์ด๊ฑธ ๋‹ค์‹œ ๊ธ€์ž๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์–ด.
์ƒ๊ทผ: ๊ทธ๋ ‡๋„ค. 25114๋ฅผ ๋‹ค์‹œ ์˜์–ด๋กœ ๋ฐ”๊พธ๋ฉด, "BEAAD", "YAAD", "YAN", "YKD", "BEKD", "BEAN" ์ด 6๊ฐ€์ง€๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, BEAN์ด ๋งž๋Š” ๋‹จ์–ด๋ผ๋Š”๊ฑด ์‰ฝ๊ฒŒ ์•Œ์ˆ˜ ์žˆ์ž–์•„?
์„ ์˜: ์˜ˆ๊ฐ€ ์ ์ ˆํ•˜์ง€ ์•Š์•˜๋„ค ใ… ใ…  ๋งŒ์•ฝ ๋‚ด๊ฐ€ 500์ž๋ฆฌ ๊ธ€์ž๋ฅผ ์•”ํ˜ธํ™” ํ–ˆ๋‹ค๊ณ  ํ•ด๋ด. ๊ทธ ๋•Œ๋Š” ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ•ด์„์ด ์ •๋ง ๋งŽ์€๋ฐ, ๊ทธ๊ฑธ ์–ธ์ œ ๋‹คํ•ด๋ด?
์ƒ๊ทผ: ์–ผ๋งˆ๋‚˜ ๋งŽ์€๋ฐ?
์„ ์˜: ๊ตฌํ•ด๋ณด์ž!
์–ด๋–ค ์•”ํ˜ธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์•”ํ˜ธ์˜ ํ•ด์„์ด ๋ช‡ ๊ฐ€์ง€๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— 5000์ž๋ฆฌ ์ดํ•˜์˜ ์•”ํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์•”ํ˜ธ๋Š” ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ถœ๋ ฅ
๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ•ด์„์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค. ์ •๋‹ต์ด ๋งค์šฐ ํด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 1000000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์•”ํ˜ธ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์•”ํ˜ธ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก 0 ์ฒ˜๋ฆฌ
1) ์ฒซ๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ 0์ธ ๊ฒฝ์šฐ
2) ๋งˆ์ง€๋ง‰ ์ˆซ์ž๊ฐ€ 0์ด๊ณ  ๋งˆ์ง€๋ง‰ ์ง์ „์˜ ์ˆซ์ž๊ฐ€ 1,2๊ฐ€ ์•„๋‹ ๋•Œ
3) ๊ทธ ์™ธ ์ค‘๊ฐ„์— 10,20์ด ์•„๋‹Œ 0์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ

๐Ÿ’ก ํ˜„์žฌ ์ˆซ์ž๊ฐ€ 1โ‰คxโ‰ค9์ด๋ฉด, dp[x] = dp[x-1]
๋ฐ”๋กœ ์•ž ์ˆซ์ž์™€ ํ•ฉํ•ด์„œ 10โ‰คxโ‰ค26์ด๋ฉด, dp[x] = dp[x-1] + dp[x-2]
(0์ฒ˜๋ฆฌ์˜ 3๋ฒˆ์ด ์ด ์ฝ”๋“œ๋กœ ํ•ด๊ฒฐ๋จ)

2. ํ•ต์‹ฌ ํ’€์ด

0์ฒ˜๋ฆฌ
1. ์ฒซ๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ 0์ธ ๊ฒฝ์šฐ / ๋งˆ์ง€๋ง‰ ์ˆซ์ž๊ฐ€ 0์ด๊ณ  ๋งˆ์ง€๋ง‰ ์ง์ „์˜ ์ˆซ์ž๊ฐ€ 1,2๊ฐ€ ์•„๋‹ ๋•Œ

if (str.charAt(0) == '0')
	flag = 1;
else if (str.charAt(length - 1) == '0' && str.charAt(length - 2) != '1' && str.charAt(length - 2) != '2')
	flag = 1;
  1. ํ˜„์žฌ ์ˆซ์ž๊ฐ€ 1โ‰คxโ‰ค9์ด๋ฉด,
    dp[x] = dp[x-1]
    ๋ฐ”๋กœ ์•ž ์ˆซ์ž์™€ ํ•ฉํ•ด์„œ 10โ‰คxโ‰ค26์ด๋ฉด,
    dp[x] = dp[x-1] + dp[x-2]
else {
	for (int i = 2; i <= length; i++) {
		if (str.charAt(i-1) > '0')
			dp[i] = dp[i - 1] % 1000000;

		int tmp = Integer.parseInt(str.substring(i-2,i));
		if (10 <= tmp && tmp <= 26)
			dp[i] = (dp[i] + dp[i - 2]) % 1000000;
	}
}

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;

public class DP_15 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String str = br.readLine();
		int length = str.length();
		long[] dp = new long[length + 1];
		int flag = 0;
		
		dp[0] = dp[1] = 1;

		if (str.charAt(0) == '0')
			flag = 1;
		else if (str.charAt(length - 1) == '0' && str.charAt(length - 2) != '1' && str.charAt(length - 2) != '2')
			flag = 1;
		else {
			for (int i = 2; i <= length; i++) {
				if (str.charAt(i-1) > '0')
					dp[i] = dp[i - 1] % 1000000;

				int tmp = Integer.parseInt(str.substring(i-2,i));
				if (10 <= tmp && tmp <= 26)
					dp[i] = (dp[i] + dp[i - 2]) % 1000000;
			}
		}
		
		if(flag != 0)
			bw.write("0");
		else
			bw.write(dp[length]+"");
		
		bw.flush();
		bw.close();
	}
}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€