Skip to content

Latest commit

ย 

History

History
373 lines (266 loc) ยท 9.6 KB

File metadata and controls

373 lines (266 loc) ยท 9.6 KB

์žฌ๊ท€ํ•จ์ˆ˜

1. ์žฌ๊ท€ํ•จ์ˆ˜

๐Ÿ‡ ์žฌ๊ท€ํ•จ์ˆ˜๋ž€?

  • ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜ : recursive_function()

  • ํŠน์ •ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ž๊ธฐ์ž์‹ ์„ ํฌํ•จ

  • ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋™์ผ

    โ‡’ ์ด์œ  : ํ•จ์ˆ˜๋ฅผ ๊ณ„์† ํ˜ธ์ถœ์‹œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœํ•˜๊ธฐ ํ•จ์ˆ˜๊ฐ€ ๋จผ์ € ์ˆ˜ํ–‰์„ ๋๋‚ด์•ผ ๊ทธ ์•ž์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ

  • ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒ๋‹น์ˆ˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

  1. ํŒŒ์ด์ฌ ์˜ˆ์ œ

  • ๋ฌธ์ž์—ด์ด ๋ฌดํ•œํžˆ ์ถœ๋ ฅํ•˜๋‹ค๊ฐ€ ์žฌ๊ท€์˜ ์ตœ๋Œ€ ๊นŠ์ด ์ดˆ๊ณผ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋œธ
def recursive_function(): # def๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์•ฝ์–ด
	print('์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.')
	recursive_function()

recursive_function() 

๐Ÿ‡ ์ž์—ฐ์ˆ˜(์–‘์˜ ์ •์ˆ˜)

  • 1์€ ์ž์—ฐ์ˆ˜
  • ์ž์—ฐ์ˆ˜ n์˜ ๋ฐ”๋กœ ๋‹ค์Œ ์ •์ˆ˜๋„ ์ž์—ฐ์ˆ˜์ด๋‹ค.

๐Ÿ‡์ •๋ ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋ณ‘ํ•ฉ, ํ€ต ์ •๋ ฌ)

  • ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ ํ™œ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋‹ค.

์ ‘๊ทผ ๋ฐฉ์‹

  1. ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ•˜๊ธฐ
  • ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์˜ ํŒฉํ† ๋ฆฌ์–ผ๊ฐ’
0! = 1
n>0 ์ด๋ฉด n! = n x (n-1)!

5!
5x4x3x2x1= 120

int result = 0
for(int i = 5; i<0;i--){
result = result * i;

}

์žฌ๊ท€ํ˜ธ์ถœ(recursive call)

  • ์ž์‹ ๊ณผ ๋˜‘๊ฐ™์€ ๊ตฌ์กฐ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹
  • ๋ฌธ์ œ) 0 ์ด์ƒ์˜ ๋‘์ •์ˆ˜ n, m ์ด ์ฃผ์–ด์กŒ์„๋•Œ n ๊ตฌํ•˜์‹œ์˜ค

์žฌ๊ท€ ์ ‘๊ทผ

  1. ์ƒํƒœ ์ •์˜
  • ์žฌ๊ท€๋Š” ๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ’€์ด ๋ฐฉ๋ฒ•
  • ๋ถ€๋ถ„๋ฌธ์ œ๋Š” ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด์–ด ํ•˜๋‚˜์˜ ๋‹ต์„ ๋‚ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋‹ต์„ ๋‚ด๋Š”๋ฐ๋Š” ์ž…๋ ฅ๋˜๋Š” ๋ณ€์ˆ˜
  • ์ด๋ ‡๊ฒŒ ๋‹ต์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ณ€์ˆ˜๋“ค์„ ์ƒํƒœ(state)
  • ํ•˜๋‚˜์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ๋Š” ๋ฌธ์ œ
  • 2๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ์ƒํƒœ(n,m) ์ •์˜ํ•˜์—ฌ ํ‘œ๊ธฐ
  1. ์ข…๋ฃŒ ์กฐ๊ฑด
  • ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์„ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋‹ค๊ฐ€ ์–ธ์  ๊ฐ€๋Š” ์ข…๋ฃŒํ•ด์•ผ ํ•œ๋‹ค.
  • ๋‹ต์ด ๋‚˜์˜ค๋Š” ์ƒํƒœ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ข…๋ฃŒ์กฐ๊ฑด
  • n์˜ 0์ œ๊ณฑ์„ ๊ตฌํ• ๋•Œ (m=0) ๋‹ต 1
  • 0์˜ m์ œ๊ณฑ ๊ตฌํ• ๋•Œ(n=0) 1
  • 1์˜ m์ œ๊ณฑ (n= 1) 1
(n,0)  = 1
(0,m) =1
(1,m) =1
(n,m) = n*(n,m-1)

๐Ÿ‡ ๊ฑฐ๋“ญ ์ œ๊ณฑ ๊ฐ’ ๊ตฌํ•˜๊ธฐ

import java.util.Scanner;

public class powerEx {
    private static int power(int n, int m){
        if (m == 0 ) return 1;
        if (n == 0) return 1;
        if (n==0) return 1;
        return n*power(n, m-1);
    }

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();

        int result = power(n, m);
        System.out.printf("%d์˜ %d ๊ฑฐ๋“ญ์ œ๊ณฑ ๊ฐ’ : %d", n, m, result);
    }
}

๐Ÿ‡ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ

import java.util.Scanner;

public class Gcd {

    private static int gCD(int x, int y){
        if(y == 0) return x;
        else return gCD(y, x%y);
     }

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();

        int result = gCD(n, m);
        System.out.printf("%d์˜ %d ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ : %d", n, m, result);
    }
}

๐Ÿ‡ ํ•˜๋…ธ์˜์˜ ํƒ‘

์„ธ ๊ฐœ์˜ ๊ธฐ๋‘ฅ๊ณผ ์›ํŒ๋“ค์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ•œ ๊ธฐ๋‘ฅ์—์„œ ๋‹ค๋ฅธ ๊ธฐ๋‘ฅ์œผ๋กœ ๋ชจ๋“  ์›ํŒ์„ ์˜ฎ๊ธฐ๋Š” ๋ฌธ์ œ์ด๋ฉฐ, ์›ํŒ๋“ค์€ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ํฐ ์›ํŒ ์œ„์— ์ž‘์€ ์›ํŒ์ด ์˜ฌ๋ผ๊ฐ€์•ผ ํ•œ๋‹ค.

ํ•ต์‹ฌ : ๋ชฉํ‘œ๋Š” ๋ชจ๋“  ์›ํŒ์„ ๊ธฐ๋‘ฅ A์—์„œ ๊ธฐ๋‘ฅ C๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ

  1. ๋ฌธ์ œ : https://school.programmers.co.kr/learn/courses/30/lessons/12946
  2. ๊ทœ์น™
    1. ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์›ํŒ๋งŒ ์ด๋™ ๊ฐ€๋Šฅ
    2. ํฐ ์›ํŒ ์œ„์— ์ž‘์€ ์›ํŒ ์˜ฌ๋ฆด ์ˆ˜ ์—†์Œ
    3. ์–ด๋–ค ๊ธฐ๋‘ฅ ์œ„์— ์žˆ๋Š” ์›ํŒ์€ ๊ทธ ๊ธฐ๋‘ฅ์œผ๋กœ๋งŒ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ
  3. ๋ถ„์„

๊ฒฐ๋ก 

  • ์›ํŒ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ์ผ ๊ฒฝ์šฐ : ๋ฐ”๋กœ ๊ธฐ๋‘ฅ A์—์„œ ๊ธฐ๋‘ฅ C๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  • ์›ํŒ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ :
  1. ๊ฐ€์žฅ ์ž‘์€ ์›ํŒ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์›ํŒ๋“ค์„ ๊ธฐ๋‘ฅ A์—์„œ ๊ธฐ๋‘ฅ B๋กœ ์˜ฎ๊ธด๋‹ค.
  2. ๊ฐ€์žฅ ํฐ ์›ํŒ์„ ๊ธฐ๋‘ฅ A์—์„œ ๊ธฐ๋‘ฅ C๋กœ ์˜ฎ๊ธด๋‹ค.
  3. ๊ธฐ๋‘ฅ B์— ์žˆ๋Š” ์›ํŒ๋“ค์„ ๊ธฐ๋‘ฅ C๋กœ ์˜ฎ๊ธด๋‹ค.
  4. ์ƒํƒœ(๋ณ€์ˆ˜)
  • ์˜ฎ๊ธฐ๋ ค๋Š” ์›ํŒ์˜ ๊ฐœ์ˆ˜ n
  • ์›ํŒ์ด ํ˜„์žฌ ์œ„์น˜ํ•˜๋Š” ๊ธฐ๋‘ฅ๊ฐ’ from
  • ์›ํŒ์ด ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋‘ฅ to(n, from, to)
  • ex. ์›ํŒ n๊ฐœ๋ฅผ ๊ธฐ๋‘ฅ 1์—์„œ ๊ธฐ๋‘ฅ 3์œผ๋กœ ์˜ฎ๊ฒจ๋ผ! (n, 1, 3)
    • (n, from, to) โ‡’ ์›ํŒ n๊ฐœ๋ฅผ ๊ธฐ๋‘ฅ from์—์„œ ๊ธฐ๋‘ฅ to ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •
  1. ์ข…๋ฃŒ์กฐ๊ฑด
  • ์›ํŒ์ด 1์ผ ๋•Œ ์ข…๋ฃŒ
  • (1, form, to) = [from, to] โ‡’ ์›ํŒ์ด 1๊ฐœ์ผ ๋•Œ๋Š” from์—์„œ to๋กœ ์˜ฎ๊ฒจ๋ผ
  1. ์ ํ™”์‹
  • ์ƒํƒœ : (n, from, to)
  • ์ข…๋ฃŒ : (1, from, to)
  • ์ „์ด์ƒํƒœ : (n-1, from, to)

4 . ์ฝ”๋“œ

import java.util.ArrayList;
import java.util.List;

class Solution {
    
private List<int[]> hanoi(int n, int from, int to){
        if(n == 1) return List.of(new int[] {from, to});  //์ข…๋ฃŒ์กฐ๊ฑด n==1 ์ผ๋•Œ from to ์ด๋™๋งŒ ์‹œ์ผœ๋ผ
        
        //์ ํ™”์‹ ๊ตฌํ˜„
        int empty = 6 - from - to;
        
        List<int[]> result = new ArrayList<>();
        result.addAll(hanoi(n-1,from,empty));
        result.addAll(hanoi(1,from,to));
        result.addAll(hanoi(n-1,empty,to));
        return result;
               
    }
    
    
    public int[][] solution(int n) {
       return hanoi(n,1,3).toArray(new int[0][]);
    }
}
  1. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ
import java.util.Arrays;

class Hanoi {
    public int[][] hanoi(int n) {
        // 2์ฐจ์› ๋ฐฐ์—ด์„ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.
        int[][] answer = {{1,3}};

    System.out.println(n);

        return answer;
    }

    // ์•„๋ž˜๋Š” ํ…Œ์ŠคํŠธ๋กœ ์ถœ๋ ฅํ•ด ๋ณด๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
    public static void main(String[] args) {
        Hanoi h = new Hanoi();
        System.out.println(Arrays.toString(h.hanoi(2)));
    }
}

๐Ÿ‡ ํ•˜๋…ธ์˜ ์›๋ฐ˜์˜ ๊ฐœ์ˆ˜

  • ํ•˜๋…ธ์ด ํƒ‘์˜ ๋™์ž‘์›๋ฆฌ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ

// ํ•˜๋…ธ์ด์˜ ํƒ‘
package recurive;
import java.util.Scanner;

class Hanoi {
    //--- no๊ฐœ์˜ ์›๋ฐ˜์„ x๋ฒˆ ๊ธฐ๋‘ฅ์—์„œ y๋ฒˆ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊น€ ---//
    static void move(int no, int x, int y) {
        if (no > 1)
            move(no - 1, x, 6 - x - y);

        System.out.printf("์›๋ฐ˜[%d]๋ฅผ %d๋ฒˆ ๊ธฐ๋‘ฅ์—์„œ %d๋ฒˆ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊น€\n", no, x, y);

        if (no > 1)
            move(no - 1, 6 - x - y, y);
    }

    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);

        System.out.println("ํ•˜๋…ธ์ด์˜ ํƒ‘");
        System.out.print("์›๋ฐ˜์˜ ๊ฐœ์ˆ˜ : ");
        int n = stdIn.nextInt();

        move(n, 1, 3);    // ์ œ 1 ๊ธฐ๋‘ฅ์— ์Œ“์ธ n๊ฐœ๋ฅผ ์ œ 3 ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊น€
    }
}

๐Ÿ‡ ๋ชจ์Œ ์‚ฌ์ „

ํ•ด์„ค : https://ksb-dev.tistory.com/273

  • A, E, I, O, U ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ 5์ž๋ฆฌ ์ด๋‚ด์˜ ๋ฌธ์ž๋ฅผ ๋งŒ๋“ค๊ณ , ์ •๋ ฌํ•˜์—ฌ ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž๊ฐ€ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ
  • ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” "A"์ด๊ณ , ๋‘ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” "AA"์ด๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋‹จ์–ด๋Š” "UUUUU"
  1. ๋ฌธ์ œ : https://school.programmers.co.kr/learn/courses/30/lessons/84512
  2. ๋ถ„์„
  • ์ƒํƒœ(word) : (word)๋กœ ์‹œ์ž‘๋˜๋Š” ๋ชจ๋“  ๋‹จ์–ด
  • ์ข…๋ฃŒ์กฐ๊ฑด : (๊ธธ์ด๊ฐ€ 5์ธ word) = word
  • ์ ํ™”์‹(word) =[word]+[word+'A']+[word+'E']+[word+'I']+[word+'O']+[word+'U']
  • ์ข…๋ฃŒ์กฐ๊ฑด 5์ผ ๋•Œ, ๋ฐ”๋กœ word ๋ฐ˜ํ™˜
  • ๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ
private List<String> generate(String word){ 
	//์ข…๋ฃŒ ์กฐ๊ฑด, ์ ํ™”์‹ ๊ตฌํ˜„
}

// ์ข…๋ฃŒ์กฐ๊ฑด 5์ผ ๋•Œ, ๋ฐ”๋กœ word ๋ฐ˜ํ™˜
private List<String> generate(String word){
       //์ข…๋ฃŒ ์กฐ๊ฑด , ์ ํ™”์‹ ๊ตฌํ˜„ 
      List<String> wrods = new ArrayList<>();
      words.add(word);
      if(word.length() == 5) return words;

    //์ ํ™”์‹  
  }
private List<String> generate(String word){
       //์ข…๋ฃŒ ์กฐ๊ฑด , ์ ํ™”์‹ ๊ตฌํ˜„ 
      List<String> wrods = new ArrayList<>();
      words.add(word);
      if(word.length() == 5) return words;

    //์ ํ™”์‹   :์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ž๋ฅผ words ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค. 
      private static fianl char[] CHARS = "AEIOU".toCharArray();
    

  }
  1. ์ฝ”๋“œ
import java.util.ArrayList;
import java.util.List;

class Solution {
    
    private static final char[] CHARS = "AEIOU".toCharArray();
    
    private List<String> generate(String word){
      
      List<String> words = new ArrayList<>();
      words.add(word);
      if(word.length() == 5) return words;

       for(char c : CHARS){
                  words.addAll(generate(word + c));
          }
       return words;
}
  
    
    
    
    public int solution(String word) {
       
        return generate("").indexOf(word);
    }
}
  1. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด
import java.util.*;
class Solution {
    List<String> list = new ArrayList<>();
    void dfs(String str, int len) {
        if(len > 5) return;
        list.add(str);
        for(int i = 0; i < 5; i++) dfs(str + "AEIOU".charAt(i), len + 1);
    }
    public int solution(String word) {
        dfs("", 0);
        return list.indexOf(word);
    }
}
class Solution {
    public int solution(String word) {
        int answer = 0, per = 3905;
        for(String s : word.split("")) answer += "AEIOU".indexOf(s) * (per /= 5) + 1;
        return answer;
    }
}