๐Ÿ˜ˆ ์ง€์˜ฅ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„น์…˜์ด ์ง€๋‚˜๊ฐ€๊ณ  ์žˆ๋‹ค.

image

๋ชฉ์š”์ผ๊นŒ์ง€๋งŒ ์ž˜ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉด,,, ์ด์ œ ์›น์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ฐ˜ ์ง€์‹์„ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ฌด๋ž˜๋„ ์žฅ๊ธฐ์ ์œผ๋กœ ๋ณด๊ณ  ๊ณต๋ถ€ํ•ด์•ผํ•˜๋Š”
์ปจํ…์ธ ๋ผ๊ณ  ์ƒ๊ฐ๋„๋“ค๊ณ โ€ฆ. ์ง€๊ธˆ๊นŒ์ง€ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ
์ดํ•ด์•ˆ๋˜๋Š” ๊ฒƒ๋„ ์–ต์ง€๋กœ ์ดํ•ดํ•ด๋ณด๋ ค๊ณ  ๋…ธ๋ ฅ๋„ ํ•ด๋ดค๋‹ค.

80%์ •๋„๋Š” ํ’€๊ณ  20% ์ •๋„๋Š” ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋“œ๋ฅผ ๋นŒ๋ ธ๋Š”๋ฐ
์–ป์–ด๊ฐ€๋Š” ๊ฒƒ๋„ ๋งŽ์•˜๊ณ , ๋ฌธ๋ฒ•์˜ ์“ฐ์ž„๋„ ์กฐ๊ธˆ ๋ถ„๋ช…ํ•˜๊ฒŒ ์“ฐ๋Š” ๊ฒƒ๋“ค๋„ ๋Š˜์–ด๋‚ฌ๋‹ค.


์˜ค๋Š˜์€ ์–ด์ œ ๋ฐฐ์šด ์ด๋ก ์„
์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‘ธ๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.
์˜ค๋Š˜์€ ๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ •๋ฆฌํ•ด๋ณด๋ คํ•œ๋‹ค.
์ž์„ธํ•œ ๋ฌธ์ œ ๋‚ด์šฉ์€ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  ์ธก์˜ ์ž๋ฃŒ์ด๊ธฐ ๋•Œ๋ฌธ์—
๋‚ด๊ฐ€ ํ’€์—ˆ๋˜ ๋ฐฉ์‹๊ณผ ๋Œ€๋žต์ ์ธ ๋งฅ๋ฝ๋งŒ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.


Greedy ๊ด€๋ จ ๋ฌธ์ œ.

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜. ์ด๋ฆ„ ๋ถ€ํ„ฐ ํƒ์š•์Šค๋Ÿฝ๊ธฐ ๊ทธ์ง€์—†๋‹ค.
๋ฌธ์ œ๋ฅผ ํ’€๋•Œ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐฐ์› ๊ณ 
์ž”๋ˆ ๊ฑฐ์Šค๋ฆ„๋ˆ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

image

๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ์„๋•Œ ๋กค ์ƒ์ ๊ณผ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
๋ผ์ธ์ „ ์ดํ›„ ๋ณต๊ท€ํ•œ๋‹ค์Œ์—
๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณจ๋“œ๋ฅผ ์ „๋ถ€ ์•Œ๋œฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ
์ข€ ๋” ๊ฐ•ํ•œ ์ƒํƒœ๋กœ ๋ผ์ธ์ „์„ ์ง€์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„ ๊ทธ๊ฑฐ์— ๋งž์•„ ์•„์ดํ…œ์„ ์‚ฌ๋Š” ๊ฒƒ.
์ด๋ฒˆ ๋ฌธ์ œ๋„ ๊ฑฐ์Šค๋ฆ„๋ˆ๋„ ๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค.

4260์›์„ ๋ฐ›์•˜๊ณ , ๊ฑฐ์Šค๋ฆ„๋ˆ์ด 500์›,100์›,50์›,10์› ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„๋–„

500์› * 8

100์› * 2

50์› * 1

10์› * 1

์ด 12๊ฐœ์˜ ๋™์ „์„ ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผ ์ตœ์„ ์˜ ์„ ํƒ์ผ ๊ฒƒ์ด๋‹ค.
500์›์งœ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด ๋™์ „์„ ๋งˆ๊ตฌ์ค€๋‹ค๋ฉด ๋ถ„๋ช… ํ™”๋‚  ๊ฒƒ์ด ๋ถ„๋ช….

public int changeMoney(int k) {
    // 1์›, 5์›, 10์›, 50์›, 100์›, 500์› ๋™์ „ ์ˆ˜๋Ÿ‰๋งŒํผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ
    // ํฐ์ˆ˜๋ถ€ํ„ฐ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๋ชซ์„ ๊ตฌํ•ด ๋™์ „ ์ˆ˜๋Ÿ‰์— ๋„ฃ๊ธฐ
    // ๋‚˜๋จธ์ง€๊ฐ’์œผ๋กœ ๋‹ค์Œ ์ˆ˜์˜ ๋ชซ์„ ๊ตฌํ•˜
    int currentCoin = 0;
    int remainCoin = k;
    int[] coin = {500,100,50,10};
    for(int i=0; i<coin.length; i++){
        if(remainCoin>=coin[i]){
            currentCoin += remainCoin/coin[i];
            remainCoin = remainCoin%coin[i];
        }
    }
    return currentCoin;
}

coin์ด๋ผ๋Š” ๊ฑฐ์Šฌ๋Ÿฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๋™์ „์˜ ์ข…๋ฅ˜์™€
์ด ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผํ•˜๋Š” ๊ธˆ์•ก์„ k๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•ด์ฃผ๊ฒŒ๋œ๋‹ค.
๋™์ „์˜ ์ข…๋ฅ˜๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ ์‹œํ‚ค๊ณ 
๋™์ „์ข…๋ฅ˜์—๋”ฐ๋ฅธ ๋‚จ์€ ๊ธˆ์•ก์„ ๋‚˜๋ˆ  ๋ชซ์„ ๋™์ „ ๊ฐœ์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๊ฒŒ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ๋‚จ์€ ๊ธˆ์•ก์€ ๋‹ค์Œ ๋™์ „์ข…๋ฅ˜์™€ ๋‚˜๋ˆ ์ง€๊ฒŒ ๋˜๋ฉฐ
์ด๋ ‡๊ฒŒ ์ญ‰ ์ง„ํ–‰ ํ›„ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜๊ฐ’์€ ์œ„์—์„œ ์˜ˆ์ธก ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์ด 12๋ผ๋Š” ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.


simulate ๊ตฌํ˜„ ๋ฌธ์ œ

๋ฐฐ์—ด์ด๋ผ๋Š” ๋ณด๋“œ๊ฒŒ์ž„ ํŒ์œ„์—์„œ
๋ง์„ ์ด๋™์‹œ์ผœ ์ ์ˆ˜๋ฅผ ์–ผ๋งˆ๋‚˜ ํš๋“ํ–ˆ๋Š”์ง€ ์ถ”์ถœํ•ด๋‚ด๋Š” ๋ฌธ์ œ์˜€๋‹ค.
์ด ๋ฌธ์ œ๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ตฌํ˜„์— ๊ด€๋ จ๋œ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์•˜๋‹ค.
ํ•ด๋‹น ์ง€์‹œ์‚ฌํ•ญ๋Œ€๋กœ ์ดํ–‰ํ•ด ๋‚ด๊ฐ€ ์–ป์€ ์ ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๋Š”?
๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์–ด์ง„ ๋ฌธ์ œ์˜ ์ผ€์ด์Šค๋งŒ ์ž˜ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

public Integer game(int[][] board, String operation) {
    // TODO:
    int ud = 0;
    int rl = 0;
    int count = 0;
    if(board[ud][rl]==1) count = 1;
    for(int i=0; i<operation.length(); i++){
      try{   
        int test = 0;
        if(operation.charAt(i)=='U') ud -= 1;
        if(operation.charAt(i)=='D') ud += 1;
        if(operation.charAt(i)=='R') rl += 1;
        if(operation.charAt(i)=='L') rl -= 1;
        test = board[ud][rl];
      }catch (ArrayIndexOutOfBoundsException e){ // ๋ฒ”์œ„๊ฐ’์ด ๋ฒ—์–ด๋‚˜๋ฉด return null ํ•ด์ฃผ๋Š” ๊ตฌ๋ฌธ
        return null;
      }
      if(board[ud][rl]>0) count+=board[ud][rl];
    }
    return count;
}

ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ ์ ์ˆ˜๊ฐ€ ๋งค๊ฒจ์ ธ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด๋™๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง€๋ฉฐ
0,0์œ„์น˜์—์„œ ์‹œ์ž‘ํ•˜๊ณ  U,R,L,D๋ผ๋Š” ์ด๋™ ๋ช…๋ น์„ ํ†ตํ•ด ๋ฐฐ์—ดํŒ์„ ์ด๋™ํ•˜๋ฉฐ
์ด๋™์‹œ ํ•ด๋‹นํŒ์— ์ ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ์ ์ˆ˜๋ฅผ ํš๋“ํ•˜์—ฌ

์ตœ์ข…์ ์œผ๋กœ ์ด๋™๋ช…๋ น์„ ์™„๋ฃŒ ํ–ˆ์„๋•Œ์˜ ์ ์ˆ˜๋ฅผ ํ•ฉ์‚ฐํ•ด์ฃผ๋Š” ๋ฌธ์ œ๋‹ค.
์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๊ฒŒ์ž„ํŒ์„ ๋ฒ—์–ด๋‚ฌ์„ ๊ฒฝ์šฐ null๋กœ ๋ฆฌํ„ดํ•ด์ฃผ๋Š”
์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

DP ๋ฌธ์ œ

๋™์  ๊ณ„ํš๋ฒ•์— ๊ด€ํ•œ ๋ฌธ์ œ๋‹ค.
๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž‘์€๋ฌธ์ œ๋กœ ๋‚˜๋ˆ  ํ•ด๊ฒฐํ•˜๋Š” ํ’€์ด๋ฒ•์ด๋‹ค.
๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ์˜ˆ๋กœ๋“ ๋‹ค.
์•„๋ž˜์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ณต๋ถ€๋ฅผ ํ–ˆ์—ˆ๊ณ  ์˜ˆ์ œ๋กœ ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋™์  ๊ณ„ํš๋ฒ•(Dynamic Programming) Reference

์ด๋ฒˆ ๋ฌธ์ œ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋™์  ๊ณ„ํš๋ฒ•์„ ์ ์šฉํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์˜€๊ณ 
์ž”๋ˆ์„ ๊ฑฐ์Šฌ๋Ÿฌ์ฃผ๋Š”๋ฐ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ „์˜ ์ข…๋ฅ˜์—์„œ
ํ•ด๋‹น ์ž”๋ˆ์„ ๊ฑฐ์Šฌ๋Ÿฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ช‡๊ฐ€์ง€๊ฐ€ ๋˜๋Š”๊ฐ€?
์ด ๋ถ€๋ถ„์ด ํ•ต์‹ฌ ๋ฌธ์ œ ์˜€๊ณ , ๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ–ˆ๋‹ค.

public long dp(int money, int[] type) {
    // ๋ชฉํ‘œ๊ธˆ์•ก์˜ ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ๋‹ด๊ธฐ์œ„ํ•œ ๋ฐฐ์—ด
    long[] numberOfCase = new long[money+1];
    // ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” ์ž๊ธฐ์ž์‹ ์˜ ์ˆซ์ž์˜ ๊ฒฝ์šฐ์— ์ˆ˜๋กœ 1๋กœ ๊ณ ์ •
    numberOfCase[0] = 1;

    // ๋™์ „ ํƒ€์ž…์„ ์ˆœํšŒํ•  ํฌ๋ฌธ
    for(int coin=0; coin<type.length ; coin++){
      for(int noc=1; noc<numberOfCase.length; noc++){
        // ๋™์ „ ํƒ€์ž…์ด ํ•ด๋‹น ๊ฒฝ์šฐ์˜์ˆ˜ ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ์—๋งŒ ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ์ฒดํฌ
        // ์ฆ‰ 10์›์˜ ํƒ€์ž… ๋™์ „์ด ๋“ค์–ด์™”์„ ๊ฒฝ์šฐ 10์› ์ด์ƒ์˜ ๊ฒฝ์šฐ์—๋งŒ ์กฐ๊ฑด๋ฌธ์‹คํ–‰๊ฐ€๋Šฅ
        if(type[coin]<=noc){
          // ํ•ด๋‹น ๋™์ „ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ์ผ€์ด์Šค๋ฅผ ๊ฐ ์ผ€์ด์Šค๋ณ„๋กœ ์ €์žฅ 10์›์œผ๋กœ๋Š” 20์›,30์›,40์›.... 
          // ์ญ‰์ญ‰ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹นํ•˜๋Š” ์›์— 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ
          numberOfCase[noc] = numberOfCase[noc]+numberOfCase[noc-type[coin]];
        }
      }
    }
	return numberOfCase[money];
}

์˜ˆ์ œ๋กœ

50์›์„ ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผํ•˜๊ณ 
10์›,20์›,50์› ์ด๋ผ๋Š” ์ž”๋ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด
์–ผ๋งŒํผ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๋™์ „์„ ์ง€๋ถˆํ•ด์•ผํ•˜๋Š”๊ฐ€?

50ย  - ๊ฒฝ์šฐ์˜ ์ˆ˜ 1

20ย  ย 20ย  ย 10ย  - ๊ฒฝ์šฐ์˜ ์ˆ˜ 2

20ย  10ย  10ย  10ย  - ๊ฒฝ์šฐ์˜ ์ˆ˜ 3

10ย  ย 10ย  ย 10ย  10ย  10 - ๊ฒฝ์šฐ์˜ ์ˆ˜ 4

์œ„์™€ ๊ฐ™์ด 3๊ฐœ์˜ ์ž”๋ˆ์œผ๋กœ 4๊ฐ€์ง€์˜ ์ง€๋ถˆ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๊ฒŒ๋œ๋‹ค.

  1. 50์›์œผ๋กœ ์ง€๋ถˆ
  2. 20์› 2๊ฐœ + 10์› 1๊ฐœ
  3. 20์› 1๊ฐœ + 10์› 3๊ฐœ
  4. 10์› 5๊ฐœ

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋™์ „ ์ข…๋ฅ˜๋ณ„๋กœ ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆ„์–ด ํ’€ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ์‹œํ‚ค๋ฉด
ํ•˜์œ„ ๋ฌธ์ œ(๋™์ „ ์ข…๋ฅ˜๋ณ„๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ฒดํฌ)๋“ค์„ ๋‚˜๋ˆ„์–ด ํ’€๊ณ 
๊ทธ๊ฒƒ์„ ๊ฒฐํ•ฉํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ ์ž”๋ˆ์—๋Œ€ํ•œ
๋™์ „ ์ง€๋ถˆ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๊ฒŒ๋˜๋Š” ๊ฒƒ์ด๋‹ค.


์‚ฌ์‹ค ์•„์ง ๋™์ ๊ณ„ํš๋ฒ•์— ๋Œ€ํ•ด ์‹ฌ๋„๊นŠ์€ ์ดํ•ด๋Š”
์–ด๋ ค์šด ์ƒํƒœ์ด๋‹ค. ์–ด๋Š์ •๋„ ๋งฅ๋ฝ๊ณผ ์‚ฌ์šฉ๋ฒ•์€ ์•Œ๊ฒ ์ง€๋งŒ
๋‹ค๋ฅธ ์‘์šฉ๋œ ๋ฌธ์ œ๊ฐ€ ๋‚˜์™”์„ ๋•Œ, ๋‚ด๊ฐ€ ์ด๋ฌธ์ œ๋ฅผ
๋™์ ๊ณ„ํš๋ฒ•์„ ์ ์šฉํ•ด ํ’€ ์ˆ˜ ์žˆ์„์ง€๋Š” ์•„์ง ๋ฏธ์ง€์ˆ˜์ด๋‹ค..
์˜ค๋Š˜์˜ ๊ณต๋ถ„๋Š” ์—ฌ๊ธฐ๊นŒ์ง€!


์˜ค๋Š˜์˜ ์ปคํ”ผ๋Ÿ‰: โ˜•๏ธ โ˜•๏ธ โ˜•๏ธ
์˜ค๋Š˜์˜ ์ ์‹ฌ: ๋ผ๋ฉด