ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] μž¬κ·€
    Algorithm 2023. 5. 5. 23:54

    μž¬κ·€λž€?

    ν•˜λ‚˜μ˜ ν•¨μˆ˜μ—μ„œ 자기 μžμ‹ μ„ λ‹€μ‹œ ν˜ΈμΆœν•΄μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

    int func1(int n) {
    	if (n == 0) return 0;
    	return n + func1(n - 1);
    }
    

    μž¬κ·€λ‘œ μ–΄λ–€ 문제λ₯Ό μ™„μ „ νƒμƒ‰μœΌλ‘œ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 과정은 λ‹€μŒκ³Ό κ°™λ‹€! (좜처: 영균이)

    1. μ™„μ „ 탐색은 μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  닡을 ν•˜λ‚˜μ”© κ²€μ‚¬ν•˜λ―€λ‘œ, κ±Έλ¦¬λŠ” μ‹œκ°„μ€ κ°€λŠ₯ν•œ λ‹΅μ˜ μˆ˜μ— μ •ν™•νžˆ λΉ„λ‘€ν•œλ‹€. μ΅œλŒ€ 크기의 μž…λ ₯을 κ°€μ •ν–ˆμ„ λ•Œ λ‹΅μ˜ 개수λ₯Ό κ³„μ‚°ν•˜κ³  이듀을 λͺ¨λ‘ μ œν•œ μ‹œκ°„ μ•ˆμ— 생성할 수 μžˆμ„ μ§€λ₯Ό κ°€λŠ ν•œλ‹€.
    2. κ°€λŠ₯ν•œ λͺ¨λ“  λ‹΅μ˜ 후보λ₯Ό λ§Œλ“œλŠ” 과정을 μ—¬λŸ¬ 개의 μ„ νƒμœΌλ‘œ λ‚˜λˆˆλ‹€. 각 선택은 λ‹΅μ˜ 후보λ₯Ό λ§Œλ“œλŠ” κ³Όμ •μ˜ ν•œ 쑰각이 λœλ‹€.
    3. 그쀑 ν•˜λ‚˜μ˜ 쑰각을 선택해 λ‹΅μ˜ 일뢀λ₯Ό λ§Œλ“€κ³ , λ‚˜λ¨Έμ§€ 닡을 μž¬κ·€ ν˜ΈμΆœμ„ 톡해 μ™„μ„±ν•œλ‹€.
    4. 쑰각이 ν•˜λ‚˜λ°–μ— 남지 μ•Šμ€ 경우, ν˜Ήμ€ ν•˜λ‚˜λ„ 남지 μ•Šμ€ κ²½μš°μ—λŠ” 닡을 μƒμ„±ν–ˆμœΌλ―€λ‘œ, 이것을 κΈ°μ € 사둀 (base condition)둜 선택해 μ²˜λ¦¬ν•œλ‹€.

    μˆ˜ν•™μ  귀납법

    1번 도미노가 μ“°λŸ¬μ§„λ‹€. → 2번 도미노가 μ“°λŸ¬μ§„λ‹€. → k번 도미노가 μ“°λŸ¬μ§€λ©΄, k+1번 도미노도 μ“°λŸ¬μ§„λ‹€.

    void func1(int n) {
    	if (n == 0) return;
    	cout << n << ' ';
    	func1(n - 1);
    }
    

    μœ„μ˜ ν•¨μˆ˜ ν˜ΈμΆœμ€ λ‹€μŒκ³Ό 같이 이루어진닀.

     

    func1(3) 호좜 → 3 좜λ ₯ → func1(2) 호좜 → 2 좜λ ₯ → func1(1) 호좜 → 1 좜λ ₯ → func1(0) 호좜 → μ’…λ£Œ

     

    즉, func(1)이 1을 좜λ ₯ν•˜κ³ ,

    func1(k)κ°€ k, k-1, k-2, ..., 1을 좜λ ₯ν•˜λ©΄

    func1(k+1)은 k+1, k, k-1, … , 1을 좜λ ₯ν•œλ‹€.

     

    μž¬κ·€μ— μžˆμ–΄μ„œ 귀납적 사고가 μ€‘μš”ν•˜λ‹€!

     

    μž¬κ·€ ν•¨μˆ˜μ˜ 쑰건

    νŠΉμ • μž…λ ₯에 λŒ€ν•΄μ„œλŠ” 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜μ§€ μ•Šκ³  μ’…λ£Œλ˜μ–΄μ•Ό ν•œλ‹€. (base condition)

    λͺ¨λ“  μž…λ ₯은 base condition으둜 μˆ˜λ ΄ν•΄μ•Ό ν•œλ‹€.

    int func1(int n) {
    	if (n == 0) return 0;
    	return n + func1(n - 1);
    }
    

    μœ„ ν•¨μˆ˜μ—μ„œ n = 0일 λ•Œ, 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜μ§€ μ•Šκ³  μ’…λ£Œκ°€ λœλ‹€.

    κ·Έλ ‡κΈ° λ•Œλ¬Έμ— n = 0일 λ•Œκ°€ base condition이 λœλ‹€.

     

    μž¬κ·€ νŠΉμ§•

    1. ν•¨μˆ˜μ˜ 인자둜 μ–΄λ–€ 것을 λ°›κ³ , μ–΄λ””κΉŒμ§€ κ³„μ‚°ν•œ 후에 자기 μžμ‹ μ—κ²Œ λ„˜κ²¨μ€„μ§€ λͺ…ν™•ν•˜κ²Œ μ •ν•΄μ•Ό ν•œλ‹€.
    2. λͺ¨λ“  μž¬κ·€ ν•¨μˆ˜λŠ” 반볡문만으둜 λ™μΌν•œ λ™μž‘μ„ ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.
    3. μž¬κ·€λŠ” 반볡문으둜 κ΅¬ν˜„ν–ˆμ„ λ•Œμ— λΉ„ν•΄ μ½”λ“œκ°€ κ°„κ²°ν•˜μ§€λ§Œ, λ©”λͺ¨λ¦¬/μ‹œκ°„μ—λŠ” 손해λ₯Ό λ³Έλ‹€.
    4. ν•œ ν•¨μˆ˜κ°€ 자기 μžμ‹ μ„ μ—¬λŸ¬ 번 ν˜ΈμΆœν•˜κ²Œ 되면 λΉ„νš¨μœ¨μ μΌ 수 μžˆλ‹€.
    5. μž¬κ·€ ν•¨μˆ˜κ°€ 자기 μžμ‹ μ„ λΆ€λ₯Ό λ•Œ μŠ€νƒ μ˜μ—­μ— 계속 λˆ„μ μ΄ λœλ‹€.

    κ΄€λ ¨ λ¬Έμ œλ“€

    λ°±μ€€ 1629 풀이

    λ°±μ€€ 11729 풀이

    λ°±μ€€ 1074 풀이

    λ°±μ€€ 2447 풀이

     

    λŒ“κΈ€

Designed by Tistory.