ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/3๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv3] : N์œผ๋กœ ํ‘œํ˜„

Jaeguk 2022. 6. 28. 19:16
๋ฌธ์ œ ๋งํฌ

https://programmers.co.kr/learn/courses/30/lessons/42895

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - N์œผ๋กœ ํ‘œํ˜„

 

programmers.co.kr

์ˆซ์ž N์œผ๋กœ ํŠน์ •ํ•œ ์ˆ˜ number์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ N์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜ ๋ฆฌํ„ด

 

ํ’€์ด

๋จผ์ € ์ฃผ์–ด์ง„ ์˜ˆ์ œ๋ฅผ ๋ณด์ž.

5๋ฅผ ์ด์šฉํ•ด์„œ 12๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์—๋Š” 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5

 

์ฒซ๋ฒˆ์งธ, ๋‘๋ฒˆ์งธ, ์„ธ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๊ฐ๊ฐ 5๋ฅผ 6๋ฒˆ, 5๋ฒˆ, 4๋ฒˆ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์—ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ 5๋ฅผ ์ด์šฉํ•ด์„œ ์ˆซ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ 5๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

1. 5๋ฅผ ์ด์–ด๋ถ™์ธ๋‹ค. ex) 55, 555, 5555, ...

2. +์—ฐ์‚ฐ ์‚ฌ์šฉ. ex) 5 + 5, 55 + 5, ...

3. - ์—ฐ์‚ฐ ์‚ฌ์šฉ. ex) 5 - 5, 55 - 5, ...

4. * ์—ฐ์‚ฐ ์‚ฌ์šฉ. ex) 5 * 5, 55 * 55, ...

5. / ์—ฐ์‚ฐ ์‚ฌ์šฉ. ex) 5 / 5, 55 / 5, ...

 

์ด๋ ‡๊ฒŒ ์ด์–ด๋ถ™์ด๊ธฐ์™€ 4๊ฐ€์ง€์˜ ์—ฐ์‚ฐ์„ ์ด์šฉํ•ด์„œ ์ˆซ์ž๋“ค์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • 1. ์ด์–ด๋ถ™์ด๊ธฐ ๋ฐฉ์‹

N์„ 1๊ฐœ ์ด์–ด๋ถ™์ด๋ฉด N,  N์„ 2๊ฐœ ์ด์–ด๋ถ™์ด๋ฉด NN,  N์„ 3๊ฐœ ์ด์–ด๋ถ™์ด๋ฉด NNN...

for(int i = 1; i<=8; i++){
        int num = N;
        for(int j = 1; j<i; j++){
            num = num * 10 + N;
        }
}โ€‹

์œ„์˜ ๊ณผ์ •์„ ํ†ตํ•ด N์„ i๋ฒˆ ์ด์–ด๋ถ™์ธ ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

  • 2,3,4,5 ์—ฐ์‚ฐ ๋ฐฉ์‹

์˜ˆ๋ฅผ ๋“ค์–ด 5๋ฅผ 3๋ฒˆ์จ์„œ ์ž„์˜์˜ ์ˆซ์ž๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•  ๋•Œ,

5๋ฅผ ํ•œ ๋ฒˆ์จ์„œ ๋งŒ๋“  ์ˆ˜์™€ 5๋ฅผ ๋‘ ๋ฒˆ ์จ์„œ ๋งŒ๋“  ์ˆ˜๋ฅผ 4๊ฐ€์ง€ ์—ฐ์‚ฐ(+, -, *, / ) ์„ ์ด์šฉํ•ด์„œ 5๋ฅผ ์„ธ ๋ฒˆ ์‚ฌ์šฉํ•œ ์ˆซ์ž๋“ค์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

N์„ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•ด ๋งŒ๋“  ์ˆ˜์™€ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•ด ๋งŒ๋“  ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์„ธ ๋ฒˆ ์‚ฌ์šฉํ•ด ๋งŒ๋“  ์ˆ˜๋“ค์„ ๋งŒ๋“ ๋‹ค.

=> Bottom - Up ๋ฐฉ์‹

๋”ฐ๋ผ์„œ ์ž„์˜์˜ K์— ๋Œ€ํ•ด N์„ K๋ฒˆ ์‚ฌ์šฉํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๋“ค์„ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” 1๋ฒˆ ~ K-1๋ฒˆ ์‚ฌ์šฉํ•ด ๋งŒ๋“  ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ DP๋ฒกํ„ฐ์— ์ˆซ์ž๋“ค์„ ์ €์žฅํ•ด๋‘”๋‹ค.

์ด๋•Œ DP[ i ] ์— ๋“ค์–ด์žˆ๋Š” ์ˆซ์ž๋“ค์€ N์„ i๋ฒˆ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  ๋ชจ๋“  ์ˆซ์ž๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. 

DP[i]์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’๋“ค์€ ์ค‘๋ณต์ด ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด set์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด N์„ K๋ฒˆ ์‚ฌ์šฉํ•ด์„œ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž.

DP[1]์— ์žˆ๋Š” ์ˆซ์ž ( +,-,*,/ ) DP[K-1]์— ์žˆ๋Š” ์ˆซ์ž, DP[2]์— ์žˆ๋Š” ์ˆซ์ž ( +,-,*,/ ) DP[K-2]์— ์žˆ๋Š” ์ˆซ์ž, DP[3]์— ์žˆ๋Š” ์ˆซ์ž ( +,-,*,/ ) DP[K-3]์— ์žˆ๋Š” ์ˆซ์ž, ... , DP[K-1]์— ์žˆ๋Š” ์ˆซ์ž ( +,-,*,/ ) DP[1]์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ ํ•œ ๊ฒฐ๊ณผ๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฒƒ์ด DP[K]๊ฐ€ ๋œ๋‹ค.

์ด๋•Œ DP[1]์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ DP[K-1]์— ์žˆ๋Š” ์ˆซ์ž์™€ ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ์™€, DP[K-1]์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ DP[1]์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์ง€ ์•Š๋ƒ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋งŒ์•ฝ ์—ฐ์‚ฐ ๊ณผ์ •์—์„œ ์—ฐ์‚ฐํ•ด์•ผํ•  ์ˆซ์ž์˜ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พผ ๊ฒฝ์šฐ๋„ ๋ชจ๋‘ ์ƒ๊ฐํ•ด์ฃผ์—ˆ๋‹ค๋ฉด ๊ฐ™๋‹ค๊ณ  ๋ด๋„ ๋˜์ง€๋งŒ ์•„๋‹ˆ๋ฉด ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋Š” ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋‹ค.

+, * ์˜ ๊ฒฝ์šฐ๋Š” ์ƒ๊ด€์—†์ง€๋งŒ /, - ๊ฒฝ์šฐ์—๋Š” a - b, a / b ์™€ b - a, b / a ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ฝ”๋“œ ์ž‘์„ฑ
 
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <set>
using namespace std;
set<int> DP[10];
 
void init(int N){
    for(int i = 1; i<=8; i++){
        int num = N;
        for(int j = 1; j<i; j++){
            num = num * 10 + N;
        }
        DP[i].insert(num);
    }
}
 
int solution(int N, int number) {
    int answer = 1;
    if(N == number)
        return answer;
    init(N);
    for(int i = 2; i<=8; i++){
        for(int j = 1; j < i; j++){
            for(auto a : DP[j]){
                for(auto b : DP[i-j]){
                    DP[i].insert(a + b);
                    if(a - b > 0)
                        DP[i].insert(a - b);
                    DP[i].insert(a * b);
                    if(a / b > 0)
                        DP[i].insert(a / b);
                }
            }
        }
        if(DP[i].find(number) != DP[i].end())
            return i;
    }
    return -1;
}
cs

 

728x90