2021. 7. 17. 18:14ใETC/Algorithm
๐๐ป ๋ฌธ์
์๋์ ๊ฐ์ด 5์ ์ฌ์น์ฐ์ฐ๋ง์ผ๋ก 12๋ฅผ ํํํ ์ ์์ต๋๋ค.
12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5
5๋ฅผ ์ฌ์ฉํ ํ์๋ ๊ฐ๊ฐ 6,5,4 ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ค ๊ฐ์ฅ ์์ ๊ฒฝ์ฐ๋ 4์
๋๋ค.
์ด์ฒ๋ผ ์ซ์ N๊ณผ number๊ฐ ์ฃผ์ด์ง ๋, N๊ณผ ์ฌ์น์ฐ์ฐ๋ง ์ฌ์ฉํด์ ํํ ํ ์ ์๋ ๋ฐฉ๋ฒ ์ค N ์ฌ์ฉํ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ์ฌํญ
- N์ 1 ์ด์ 9 ์ดํ์ ๋๋ค.
- number๋ 1 ์ด์ 32,000 ์ดํ์ ๋๋ค.
- ์์์๋ ๊ดํธ์ ์ฌ์น์ฐ์ฐ๋ง ๊ฐ๋ฅํ๋ฉฐ ๋๋๊ธฐ ์ฐ์ฐ์์ ๋๋จธ์ง๋ ๋ฌด์ํฉ๋๋ค.
- ์ต์๊ฐ์ด 8๋ณด๋ค ํฌ๋ฉด -1์ return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์์
N | number | return |
5 | 12 | 4 |
2 | 11 | 3 |
๐ ๋ฌธ์ ํด๊ฒฐ
ํด๊ฒฐ ๋ฐฉ๋ฒ - DP
โ๏ธ ํ ๊ฐ๋ถํฐ ์ฌ๋ ๊ฐ๊น์ง N์ ์ฌ์ฉํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์(๋ณ์ i)๋ฅผ ์ฌ์ฉํ ๊ฐ์์ ์ธ๋ฑ์ค์ ๋ฐฐ์ด๋ก ์ ์ฅํ๋ค.
ex) N:5์ผ ๋, 2๊ฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด possible[2] = {55, 10, 0, 25, 1} (์์๋๋ก : ์ฌ์น์ฐ์ฐ X, 5+5, 5-5, 5*5, 5/5 ์ธ ๊ฒฝ์ฐ๋ฅผ ์ ์ฅ)
โ๏ธ N์ ์ฌ์ฉํ ๊ฐ์๋ฅผ ๊ณ์ฐํ ๋์๋, ๊ฒฝ์ฐ์ ์๋ฅผ ๋๋์ด ์ด๋ฏธ ๊ณ์ฐํ ๊ฐ๋ค์ ๋ถ๋ฌ์ ๊ณ์ฐํ๋ค.
ex) N:5์ด๊ณ 4๊ฐ๋ฅผ ์ฌ์ฉํ์ ๋ ๊ฒฝ์ฐ์ ์๋ (0, 4)(1, 3)(2, 2)(3, 1) -> ์ฝ๋์์ (left, right) ํํํฉ๋๋ค.
-> ํ ๊ฐ, ๋ ๊ฐ, ์ธ ๊ฐ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ pos[] ์ ์ ์ฅ๋์ด์์ผ๋ ํ์ฉ
โ๏ธ number๊ฐ ๋์ค๋ฉด answer์ ์ ์ฅ ํ ์กฐ๊ฑด์ ๋ก break ๊ฑธ์ด๋๊ธฐ
โ๏ธ ์ฃผ์! ๋๋๊ธฐํ ๋์๋ 0 ๊ฑธ๋ฌ์ฃผ๊ธฐ
์ฝ๋
#include <string>
#include <vector>
#include <unordered_set>
using namespace std;
int solution(int N, int number) {
int answer = -1;
vector<unordered_set<int>> pos(9);
for (int i=1; i<=8;i++) { // ์กฐ๊ฑด : N์ ์ต๋ 8๊ฐ๊น์ง ์ฌ์ฉ
string s(i, N + '0'); // ์ฌ์น์ฐ์ฐ ์์ธ ๋
pos[i].insert(stoi(s));
if (stoi(s) == number) answer = i;
if (answer > 0) break; // ์ ๋ต๋์ค๋ฉด ํ์ถ
for (int l=1; l<i; l++) { // N ์ฌ์ฉ ๊ฐ์์ ๊ฒฝ์ฐ์ ์ : left
for (int a : pos[l]) {
for (int b : pos[i-l]) { // N ์ฌ์ฉ ๊ฐ์์ ๋๋จธ์ง ๊ฒฝ์ฐ์ ์ : right
if (a+b == number || a-b == number || a*b == number || (b!=0 && a/b == number))
answer = i;
pos[i].insert(a+b);
pos[i].insert(a-b);
pos[i].insert(a*b);
if (b != 0) pos[i].insert(a/b);
}
}
}
}
return answer;
}
'ETC > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers, ๋ฐฐ๋ฌ (0) | 2021.11.29 |
---|---|
Programmers, ์์๋ง๋ค๊ธฐ (0) | 2021.11.27 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ค๋จ๊ณ ์นซ์ ํ๋งค (2) | 2021.07.16 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๋ ฌ ํ ๋๋ฆฌ ํ์ ํ๊ธฐ (0) | 2021.07.16 |
Brute Force, ํด์ฌ (0) | 2021.03.07 |
Backend Software Engineer
๐๐ฎ๐ง ยท ๐๐ฎ๐๐ค๐ฃ๐๐จ๐ช๐ฃ ๐๐๐ง๐