우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»β€πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀
πŸ‘¨πŸ»β€πŸ’» PS/JAVA

[JAVA] λ°±μ€€ 2011번 γ€μ•”ν˜Έμ½”λ“œγ€‘

πŸ‘¨πŸ»β€πŸ’» PS/JAVA

[JAVA] λ°±μ€€ 2011번 γ€μ•”ν˜Έμ½”λ“œγ€‘

2022. 10. 1. 14:54


 

이 λ¬Έμ œλŠ” μ˜ˆμ™Έμƒν™©μ„ λΉ λ₯΄κ²Œ μΊμΉ˜ν•˜λŠ”κ²Œ μ€‘μš”ν•œ λ¬Έμ œμ˜€λ‹€.

 

λ¨Όμ € dp배열을 μ–΄λ–€ 쑰건으둜 μ–΄λ–€ 데이터λ₯Ό μ±„μšΈμ§€ 생각을 ν•΄λ΄μ•Όν•œλ‹€.

 

μ΅œλŒ€ 5000자리 μ΄ν•˜μ˜ μ•”ν˜Έκ°€ μ£Όμ–΄μ§„λ‹€κ³  ν–ˆμœΌλ‹ˆ, dp[i]μ—μ„œ iλŠ” μžλ¦Ώμˆ˜κ°€ 될 것이고 ν•΄λ‹Ή μžλ¦Ώμˆ˜μ—μ„œ λ§Œλ“€ 수 μžˆλŠ” 경우의 수λ₯Ό 기둝할 것이닀.

 

μžλ¦Ώμˆ˜λŠ” 높은 μžλ¦Ώμˆ˜λΆ€ν„° μ‹œμž‘ν•  것인데,

 

예제문제처럼 25114κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ,

 

dp[1] = [2] (1κ°€μ§€)

dp[2] = [2,5] [25] (2κ°€μ§€)

dp[3] = [2,5,1] [25, 1] (2κ°€μ§€)

dp[4] = [2, 5, 1, 1] [2, 5, 11] [25, 1, 1] [25, 11] (4κ°€μ§€)

dp[5] = [2, 5, 1, 1, 4] [2, 5, 1, 14] [2, 5, 11, 4] [25, 1, 1, 4] [25, 1, 14] [25, 11, 4] (6κ°€μ§€)

 

κ°€ λ˜λŠ” 것이닀.

 

 


Case 1.

 

예제문제의 경우의 수λ₯Ό λ”°μ Έλ³΄λ©΄μ„œ, λ³΄μ΄λŠ” νŒ¨ν„΄μ΄ μžˆλ‹€.

 

A~Z κΉŒμ§€ 1~26으둜 ν‘œν˜„λ˜κΈ° λ•Œλ¬Έμ—,

 

1~9 μ‚¬μ΄μ˜ μˆ«μžκ°€ μΆ”κ°€λ˜λŠ” 경우, λ…λ¦½μ μœΌλ‘œ μ•ŒνŒŒλ²³μ„ ν‘œν˜„ν•  수 있기 λ•Œλ¬Έμ— 적어도, 이전 dp값을 κ·ΈλŒ€λ‘œ κ°–κ³  μ˜¨λ‹€λŠ” 사싀을 μ•Œ 수 μžˆλ‹€.

 

dp[1] β†’ dp[2] 둜 κ°€λŠ” κ³Όμ •μ—μ„œ

 

2에닀 ,5만 λΆ™μ—¬μ£Όλ©΄ ν•˜λ‚˜μ˜ 경우의 μˆ˜κ°€ 생기기 λ•Œλ¬Έμ— 2,5 경우의수λ₯Ό κ°–κ²Œ λ˜λŠ” 것이고

 

dp[2] β†’ dp[3] 둜 κ°€λŠ” κ³Όμ •μ—μ„œ

 

[2,5] [25] 경우의 μˆ˜μ— ,1 만 λΆ™μ—¬μ£Όλ©΄ [2,5,1] [25,1] 경우의 μˆ˜λŠ” 무쑰건 μƒκΈ΄λ‹€λŠ” 보μž₯을 받을 수 있고

 

dp[3] β†’ dp[4] κ°€μ • μ—­μ‹œ

 

[2,5,1] [25,1] 경우의 μˆ˜μ— ,1 만 λΆ™μ—¬μ£Όλ©΄ [2,5,1,1] [25,1,1] 경우의 μˆ˜λŠ” 무쑰건 μƒκΈ΄λ‹€λŠ” 보μž₯을 받을 수 μžˆλ‹€.

 

λ§ˆμ§€λ§‰μœΌλ‘œ dp[4] β†’ dp[5] κ³Όμ •μ—μ„œλ„

 

[2, 5, 1, 1] [2, 5, 11] [25, 1, 1] [25, 11] 경우의 μˆ˜μ— ,4λ₯Ό λΆ™μ—¬μ£Όλ©΄ [2, 5, 1, 1, 4] [2, 5, 11, 4] [25, 1, 1, 4]  [25, 11, 4] λ™μΌν•œ 4개의 경우의 μˆ˜κ°€ 생긴닀.

 

즉, λΆ™λŠ” μˆ«μžκ°€ 1μ—μ„œ 9 μ‚¬μ΄μ˜ 값을 κ°€μ§€λ©΄, dp[i+1]의 ν¬κΈ°λŠ” μ΅œμ†Œ dp[i]의 경우의 수λ₯Ό ν¬ν•¨ν•˜κΈ°λ•Œλ¬Έμ— 

 

dp[i+1] = dp[i] 둜 ν‘œν˜„ν•  수 μžˆλ‹€.

 

μ—¬κΈ°μ„œ μ£Όμ˜ν•΄μ•Όν•  사항은 0이 λΆ™μ—ˆμ„ λ•Œμ΄λ‹€.

 

0은 1~9와 λ‹€λ₯΄κ²Œ λ…λ¦½μ μœΌλ‘œ [2,5,0] κ³Ό 같이 혼자 쓰일 수 μ—†κΈ° λ•Œλ¬Έμ—, 1μ—μ„œ 9μ‚¬μ΄μ˜ μˆ«μžκ°€ 뒀에 λΆ™μ—ˆμ„λ•Œμ—λ§Œ 

 

dp[i+1] = dp[i] 둜 ν‘œν˜„ν•  수 μžˆλ‹€.

 

 


Case 2.

 

dp[3] β†’ dp[4] κ³Όμ •μ—μ„œλŠ” 2κ°œμ—μ„œ 4개둜 λŠ˜μ–΄λ‚¬κ³ , dp[4] β†’ dp[5] κ³Όμ •μ—μ„œλŠ” 4κ°œμ—μ„œ 6개둜 λŠ˜μ–΄λ‚¬λ‹€.

 

dp[3] β†’ dp[4] 상황을 λ¨Όμ € μ‚΄νŽ΄λ³΄λ©΄ Case 1. μ—μ„œ μ‚΄νŽ΄λ΄€λ“―μ΄ μƒκΈ°λŠ” 2개의 κ²½μš°μ˜μˆ˜μ— λ˜λ‹€λ₯Έ 2개의 경우의 μˆ˜κ°€ λ°œμƒν–ˆλ‹€.

 

[2,5,1] [25, 1] 의 경우의 μˆ˜μ— 1이 λΆ™λŠ”κ²½μš° λ…λ¦½μ μœΌλ‘œ λΆ™μ΄λŠ” 것이 μ•„λ‹ˆλΌ ν•©μ³μ„œ 11둜 ν‘œν˜„ν•  수 μžˆμ–΄  [2, 5, 11] [25, 11] 와 같은 μƒˆλ‘œμš΄ 경우의 μˆ˜κ°€ 생긴닀. 

 

즉 뒀에 λΆ™λŠ” μˆ«μžκ°€ ν•©μ³μ Έμ„œ 10~ 26 값을 λ§Œλ“€μ–΄λ‚΄λ©΄ μƒˆλ‘œμš΄ μ•ŒνŒŒλ²³ ν•˜λ‚˜λ‘œ ν‘œν˜„ν•  수 있기 λ•Œλ¬Έμ— μƒˆλ‘œμš΄ 경우의 μˆ˜κ°€ μƒκΈ°λŠ” 것이닀.

 

κ²°λ‘ λΆ€ν„° λ§ν•˜λ©΄, μœ„μ™€ 같은 κ²½μš°μ—λŠ” Case 1. μ—μ„œ κ΅¬ν–ˆλ˜ dp[i+1] = dp[i] μƒν™©μ—μ„œ dp[i+1] 에 dp[i-1] 값을 ν•œλ²ˆ 더 더할 수 μžˆλ‹€.

 

dp[3] β†’ dp[4] κ³Όμ •μ—μ„œ 

 

11이 λ§Œλ“€μ–΄μ§€κ³  μ΄λŠ” μ•ŒνŒŒλ²³ ν•˜λ‚˜λ₯Ό ν‘œν˜„ν•  수 μžˆλ‹€.

 

즉. [2,5] [25] μƒν™©μ—μ„œ 11을 뢙인닀고 μƒκ°ν•˜λ©΄ [2,5 ,11] [25 ,11] 이 λ˜λŠ” 것이닀.

 

그리고 [2,5] 와 [25] λŠ” dp[2]의 경우의 μˆ˜μ™€ κ°™λ‹€.

 

λ§ˆμ§€λ§‰μœΌλ‘œ, dp[4] β†’ dp[5] 과정을 μ‚΄νŽ΄λ³΄λ©΄ 

 

1뒀에 4κ°€ λΆ™κΈ° λ•Œλ¬Έμ—, 이 경우 μ—­μ‹œ 14λ‘œμ„œ ν•˜λ‚˜μ˜ 독립적인 μ•ŒνŒŒλ²³μœΌλ‘œ λ§Œλ“€ 수 μžˆλ‹€.

 

즉 dp[3] 경우의 수인 [2,5,1] [25, 1] μ—μ„œ ,14 λ₯Ό λΆ™μ—¬μ£ΌλŠ” 것과 κ°™μ•„μ§€λŠ” 것이닀.

 

[2,5,1, 14] [25,1,14] 의 경우의 μˆ˜κ°€ Case 2.와 같은 μƒν™©λ•Œλ¬Έμ— μƒκΈ°κ²Œ λ˜λŠ” 것이닀.

 

 


λ˜ν•œ 제일 첫번째 μžλ¦Ώμˆ˜κ°€ 0으둜 μ‹œμž‘ν•˜λŠ” κ²½μš°λŠ” μ–΄λ–€ μ•ŒνŒŒλ²³μœΌλ‘œλ„ 해독 될 수 μ—†κΈ° λ•Œλ¬Έμ— 였λ₯˜λ‘œ νŒλ‹¨ν•˜κ³  0 값을 좜λ ₯ν•˜λ©΄ λœλ‹€.

 

 

 

 

결둠은

 

1. Case 1.의 이유둜 뒀에 λΆ™λŠ” μˆ«μžκ°€ 0이 μ•„λ‹Œ 1~9 값이라면 μ΅œμ†Œ 이전 dpκ°’μ˜ 경우의 수λ₯Ό 갖을 수 있게 λœλ‹€.

2. Case 2.의 이유둜 뒀에 λΆ™λŠ” 숫자λ₯Ό ν•©μ³μ„œ 10~26을 λ§Œλ“€ 수 μžˆλ‹€λ©΄, dp[i]λŠ” dp[i-2]의 경우의 μˆ˜μ— 10~26μ‚¬μ΄μ˜ 독립적인 μ•ŒνŒŒλ²³μ„ 뢙인 꼴이 되기 λ•Œλ¬Έμ— dp[i-2]의 경우의 수λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€.

3. 0으둜 μ‹œμž‘ν•˜λŠ” μˆ˜λŠ” μ•ŒνŒŒλ²³μœΌλ‘œ ν‘œν˜„ν•  수 μ—†μœΌλ―€λ‘œ 0값을 λ¦¬ν„΄ν•œλ‹€.

 

μœ„ μ„Έκ°€μ§€λ₯Ό μ½”λ“œλ‘œμ„œ κ΅¬ν˜„ν•˜λ©΄ 정닡을 맞좜 수 μžˆλ‹€!

 

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		long[] dp = new long[input.length()+1];
		
		dp[0] =1;
		dp[1] = 1; // 0인 경우 μ œμ™Έν•˜λ©΄ 무쑰건 1개
		
		if (input.charAt(0) == '0') {
			System.out.println(0);
			return;
		}
		
		
		for (int i = 1; i < input.length(); i++) {
			char front = input.charAt(i-1); //μ•ž 숫자
			char back = input.charAt(i);
			int num = (front-'0')*10+(back-'0'); //숫자λ₯Ό 합쳀을 λ•Œ
            
			if(back>='1' && back<='9') {//Case 1
				dp[i+1]=dp[i];
				 dp[i+1]%=1000000; 
			}
            
			if((num>=10 && num<=26)) { //Case 2
				dp[i+1]+=dp[i-1];
				 dp[i+1]%=1000000; 
			}
		}
		System.out.println(dp[input.length()]%1000000);
	}

}
    'πŸ‘¨πŸ»β€πŸ’» PS/JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JAVA] λ°±μ€€ 2751번 γ€μˆ˜ μ •λ ¬ν•˜κΈ° 2】
    • [JAVA] λ°±μ€€ 11052번 γ€μΉ΄λ“œ κ΅¬λ§€ν•˜κΈ°γ€‘
    • [JAVA] λ°±μ€€ 2225번 【합뢄해】
    • [JAVA] λ°±μ€€ 9461번 γ€νŒŒλ„λ°˜ μˆ˜μ—΄γ€‘
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

    단좕킀

    λ‚΄ λΈ”λ‘œκ·Έ

    λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
    Q
    Q
    μƒˆ κΈ€ μ“°κΈ°
    W
    W

    λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

    κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
    E
    E
    λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
    C
    C

    λͺ¨λ“  μ˜μ—­

    이 νŽ˜μ΄μ§€μ˜ URL 볡사
    S
    S
    맨 μœ„λ‘œ 이동
    T
    T
    ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
    H
    H
    단좕킀 μ•ˆλ‚΄
    Shift + /
    ⇧ + /

    * λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.