https://programmers.co.kr/learn/courses/30/lessons/42895
๋ฌธ์ ์ค๋ช
์๋์ ๊ฐ์ด 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 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์์ #1
๋ฌธ์ ์ ๋์จ ์์ ๊ฐ์ต๋๋ค.
์์ #211 = 22 / 2
์ ๊ฐ์ด 2๋ฅผ 3๋ฒ๋ง ์ฌ์ฉํ์ฌ ํํํ ์ ์์ต๋๋ค.
๋์ ๋ต
์๊ฐ์ ํ๋ฆ
-
์์ ํ์์ผ๋ก ํ ์ ์์๊น?
์ฃผ์ด์ง number๋ณด๋ค N์ด ์์ ๋๋ +, x ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ 11๋ฐฐํ๊ณ
๊ฐ์ ๋๋ returnํ๊ณ
N์ด ๋ ํด ๋๋ -, / ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ง ์์๊น?
=> ์๊ฐ ๋ณต์ก๋๋ ํด ๋ฟ๋๋ฌ ๊ดํธ๊ฐ ์์ฐจ์ ์ผ๋ก ์ค์ง ์๋ ์ํฉ์ ํด๊ฒฐํ ์ ์์
=> 5, 3600 ์์ (55+5)*(55+5) ๋ก 6์ด ๋ต์ผ๋ก ์ถ๋ ฅ๋์ด์ผ ํ์ง๋ง ๊ดํธ๋ฅผ ๋ค์์ ๋จผ์ ์น๋ ์ํฉ์ ๊ณ ๋ คํ ์ ์์, ๋ฌด์กฐ๊ฑด ์์ฐจ์ ์งํ
=> ์ด ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ๋ ค๋ฉด *์ / ์ฐ์ฐ ์ ์ด๋๊ป ๋์๋ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ค์ ๋ชจ๋ test ํด๋ด์ผํจ (๊ตฌํํด๋ณด์๋๋ ๊ต์ฅํ ์ค๋๊ฑธ๋ฆผ)
-
์ฌ๊ท ํจ์๋ก ํ ์ ์์๊น?
์ด์ฐจํผ 8 ์ด๊ณผ๋ -1๋ก ๋ฐํ๋์ด์ผํ๋ฏ๋ก ์ฌ๊ท๋ฅผ ํด๋ 8๋ฒ๋ฐ์ ํ์ง ์๋๋ค. ๋ํ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์ฌ๊ทํจ์๋ฅผ ์งํํ๋ ์์ค์ ์ด๋ฏธ ๊ฒ์ฌํ ์ซ์๋ค์ ํด๋น ์๋ฅผ ๋ง๋ค ๋ ๋ค์๋ N์ ๊ฐฏ์๋ฅผ ์ฐพ์์ ๋ํด์ฃผ๋ฉด ๋๋ค. ๋ฐ๋ผ์ bfs๋ฅผ ๋๋ฉด์ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ์ ์ฅํด๋ณด์์ (N๊ณผ number์ ๋์๋น๊ต๋ 1๊ณผ ๊ฐ์ด ํจ - 4๊ฐ์ง ์ฐ์ฐ์ *11์ ํ๋ฉด์ ๊ณ์ ์๋ํ๋ ๊ฑด ๋๋ฌด ์๊ฐ๋ณต์ก๋๊ฐ ํฌ๋ค๊ณ ์๊ฐํจ)
=> bfs๋ก ์๋ํด๋ณด์์ผ๋ '55/5+5/5'๋ฅผ '(55+5)/5'๋ก ์ถ์์ํค๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ ค๋ฉด answer๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ ๋ค๋ฅธ ํจ์๋ฅผ ๋ ๊ตฌํํด์ผํด์ ๋๋ฌด ๋ณต์กํด ํฌ๊ธฐํจ
-
ํน์ ํ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ
๊ดํธ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ๊ดํธ๋ฅผ ํน์ ๋ฌธ์๋ก ๋ฐ์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ฌด ๋ณต์กํจ (๊ตฌํํด๋ณด๋ ค๊ณ ๋จธ๋ฆฌ๋ฅผ ๊ตด๋ ค๋ณด์์ผ๋ ์คํจ)
=> ๊ดํธ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๋ ๋ชจ๋ ์๋ฅผ ๊ฒ์ฌํด์ ์ฒ๋ฆฌ๋๊ฒ ํด์ผํจ
=> ๊ฒ์ฌํ ๊ฒฝ์ฐ์ ์๋ N, NN, NNN, ... , NNNNNNNN ๋ฟ์ (์ต์๊ฐ์ด 8๋ฒ ์ด๊ณผ๋ก ๋์ค๋ฉด -1 return์ด๊ธฐ ๋๋ฌธ)
=> NNN ์ (N)(NN), (NN)(N)๋ก ๋ํ๋ผ ์ ์์ผ๋ฏ๋ก ์ด์ ์ ๊ณ์ฐํด๋์๋ ๊ฐ๋ค์ ๊ฐ์ ธ์์ ๋ค์ ๊ณ์ฐํ๋ฉด ๋จ
<์ต์ข ๋ต>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> numbers(9, vector<int>());
vector<int> num_list;
int solution(int N, int number) {
int num;
int answer = 987654321;
numbers[1].push_back(N);
num = N * 11;
for (int i = 2; i < 9; i++) { // 8๋ฒ
numbers[i].push_back(num);
if (num == number && i < answer) {
answer = i;
break;
}
for (int j = 1; j < i; j++) { //4๋ฒ
int num1 = j;
int num2 = i - j;
for (int k = 0; k < numbers[num1].size(); k++) {
for (int l = 0; l < numbers[num2].size(); l++) {
int tmp[4];
tmp[0] = numbers[num1][k] + numbers[num2][l];
tmp[1] = numbers[num1][k] - numbers[num2][l];
tmp[2] = numbers[num1][k] * numbers[num2][l];
if(numbers[num2][l])
tmp[3] = numbers[num1][k] / numbers[num2][l];
for (int z = 0; z < 4; z++) {
if (find(num_list.begin(), num_list.end(), tmp[z]) == num_list.end()) {
num_list.push_back(tmp[z]);
if (tmp[z] == number && i < answer) {
answer = i;
break;
}
}
if (find(numbers[i].begin(), numbers[i].end(), tmp[z]) == numbers[i].end()) {
numbers[i].push_back(tmp[z]);
}
}
}
}
}
num = 10 * num + N;
}
if (answer > 8)
answer = -1;
return answer;
}
int main() {
int N, number;
cin >> N >> number;
cout << solution(N, number);
}
3๋ฒ์งธ ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ํน์ ํ ๋ฐฉ๋ฒ์ ์ฐพ์์ ํด๊ฒฐํ ์ฝ๋์ด๋ค.
๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด,
N = 5, number = 12 ์ผ ๋ 5๋ 8๊ฐ๊น์ง ๋์ฌ ์ ์์ผ๋ฏ๋ก 8๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ค์ด ํด๋น ์๋งํผ์ N์ด ์์ ๋ ์ฐ์ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ๊ฒฐ๊ณผ์ ์งํฉ์ ์ ์ฅํ๋ค. ์์ ๊ทธ๋ฆผ์์ '5' 1๊ฐ๋ก ๋ง๋ค ์ ์๋ ๊ฒฐ๊ณผ๋ 5 ์์ ๋ฐ์ ์๋ค. ๋ฐ๋ผ์ arr[1]์๋ {5}๋ฅผ ์ง์ด๋ฃ๋๋ค. '5' 2๊ฐ๋ก ๋ง๋ค ์ ์๋ ๊ฒฐ๊ณผ๋ '5'๋ก ๋ง๋ค ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์ '5'๋ก ๋ง๋ค ์ ์๋ ๊ฒฐ๊ณผ์ ์ฐ์ฐํ๋ฉด๋๋ค. ๊ฐ๊ฐ {5}๋ฐ์ ์์ผ๋ฏ๋ก +,-,*,/ ์ฐ์ฐ์ ์ํํ๋ฉด {55,10,0,25,1}์ด '5' 2๊ฐ์ ์ฌ์น์ฐ์ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ์๋ค์ ์งํฉ์ด๋ค. '5' 3๊ฐ๋ก ๋ง๋ค ์ ์๋ ๊ฒฐ๊ณผ๋ '55'์ ๊ฒฐ๊ณผ์งํฉ์๋ค๊ฐ '5'์ ๊ฒฐ๊ณผ์งํฉ์ ์ฐ์ฐํ๋ฉด ๋๋๋ฐ, ๋ง์ ๊ณฑ์ ์ด ์๋ ๋๋์ ๋บ์ ์ ์๋ค ํผ์ฐ์ฐ์์ ์์์ ๋ฐ๋ผ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋๋ฏ๋ก '5'์ ๊ฒฐ๊ณผ์งํฉ์๋ค๊ฐ '55'์ ๊ฒฐ๊ณผ์งํฉ์ ์ฐ์ฐํ ๊ฒฐ๊ณผ๊น์ง ๊ณ์ฐํด์ค๋ค.
์ด๋ฐ ์์ผ๋ก ๊ณ์ ๊ณ์ฐํ๋ฉด ๋๋๋ฐ ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ๊ฒฐ๊ณผ์งํฉ์ ์๊ธฐ์์ ๋ ๋ค์ด๊ฐ์ผํ๋ค๋ ์ ๊ณผ ์ค๋ณต๋ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ์๋๋ค๋ ์ ์ด๋ค. (์๋ ๊ฑด ์์ง๋ง ๋ณต์ก๋๊ฐ ๋๋ฌด ์ปค์ง๋ค.)
๊ฐ์ ํ ์
ํ๋ก๊ทธ๋๋จธ์ค์์๋ ๋ค ํ๊ณ ๋๋ฉด ๋ค๋ฅธ ์ฌ๋์ ๋ต๋ ๋ณผ ์ ์๊ณ , ๋์ ๋ต๋ ์๋์ผ๋ก ๊ณต๊ฐ๋๋ค. ๊ทธ๋์ ๋ค๋ฅธ ๋ต๋ ์ข ํ์ณ(?)๋ดค๋ค. ์ค์ ๋ก ํ ์คํธ ์ผ์ด์ค ํ์ธ์ ์งํํ๋ ์ค 130ms๊น์ง ๋์์ ๋๋ฌด ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๋ ๊ฒ ๊ฐ์์ ์ฝ๋๋ฅผ ๊ฐ์ ํด์ผํ๋ค.
์ฒ์์ ๋์จ ์ฝ๋๋ ๋ณธ์ธ๊ณผ ํธ๋ ๋ฐฉ๋ฒ์ ๊ฐ์์ผ๋ c++ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ธก๋ฉด์์ ๋ฐฐ์ธ ์ ์ด ๋ง์๋ค.
-
unordered_set ์ด์ฉ (์ ๋ ฌํ ํ์๋ ์๊ธฐ ๋๋ฌธ์)
๋ณธ์ธ์ 2์ค vector ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์ ๊ฒฐ๊ณผ์งํฉ์ ํํํ๋๋ฐ ๊ทธ ์ด์ ๋ set์ผ๋ก ๊ตฌํํ๊ณ ์ถ์์ง๋ง set์ ์์์ ์ ๊ทผํ๋ ๋ฒ์ ๋ชฐ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค๋ฅธ ์ฝ๋๋ฅผ ๋ณด๋ set ์์๋ ์๋์ ๋์ค๋ for๋ฌธ์ผ๋ก ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ณ set๋ณด๋ค ์ ๋ ฌํ ํ์๊ฐ ์๋ unordered_set ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ฉด ๋ ๋น ๋ฅด๋ค๊ณ ํ๋ค.
์ค์ ๋ก ๊ฒ์ํด๋ณด๋ unordered_set์ insert, erase, find ์ฐ์ฐ์ O(1)์ ์ํ๋๋ค.
์๋ฆฌ์ ๋ํด์๋ ๋์ค์ ๋ ์์ธํ ๊ณต๋ถํ ์์ ! (ํ์ํด๋์๋ค.)
-
auto ํ์ ์ด์ฉ
๊ณ์ํด์ ์ต๊ดํ ๋์ด์์ง ์์์์ธ์ง auto ํ์ ์ ์ฌ์ฉํ์ง ์๋๋ค. ํ์ง๋ง ๋ณ๋ก ๋ฌธ์ ๋ ๊ฒ์ ์์ด๋ณด์ธ๋ค.
-
container์ ์์ ํ๋์ฉ ๋ฐ๊ธฐ
for(int n1 : s1) // s1์ ์์๋ฅผ n1์ผ๋ก ํ๋์ฉ ๋ฐ๊ธฐ
set๋ ์ด๋ฐ ์์ผ๋ก ๊ตฌํํ๋ฉด ์์๋ฅผ ๋ฐ์์ฌ ์ ์๋ค. (iterator๋ก ๋ฐ์์๋ ๋๋ค)
-
์ต๋ ๊ฐ ์ฃผ๊ธฐ
๋ณธ์ธ์ ํ์ 987654321๊ณผ ๊ฐ์ด ์ฃผ์์ผ๋ ๊ทธ๋ฅ 1e9๋ผ๊ณ ์ฃผ๋ฉด ํท๊ฐ๋ฆด ์ผ๋ ์์ด ์ข๋ค.
์ฝ๋๋ฅผ ๋ ์ดํด๋ณด๋ dfs๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ๋ ์์๋ค. ๋๋ bfs๋ฅผ ์ด์ฉํ๋๋ฐ ๋ณ๋ก ์๊ด์ ์์ผ๋ ์ด ๋๋ถ์ ๋ ๋ณต์กํ๊ฒ ์ง๊ฒ ๋์ด ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค. ๋๊ฐ์ ๊ฐ๋ ์ ํ์ฉํด์ dfs๋ก ๊ตฌํํ ์ ์๋ค.
์ด๋ฐ ์์ผ๋ก 5์ 5~5555555๊น์ง์ ์๋ฅผ ๊ฐ๊ฐ ์ฌ์น์ฐ์ฐํ๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ค์ ๋ 5~5555555๊น์ง์ ์์ ์ฌ์น์ฐ์ฐํ๋ค. ์ฌ์น์ฐ์ฐํ๋ฉด์ 5๊ฐ ๋ช๊ฐ ๋ค์ด๊ฐ ์๋ ์ง๋ ์ฌ๊ทํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋๊ธฐ๊ณ ํด๋น ๋งค๊ฐ๋ณ์๊ฐ 8์ ๋๊ฑฐ๋ ํ์ฌ๊น์ง ๋์จ ์ต์ ๊ฒฝ์ฐ๋ณด๋ค ํฌ๋ฉด ๊ทธ๋ฅ returnํ๋ ๊ธฐ์ ์ฌ๋ก๋ฅผ ์๋ถ๋ถ์ ์ฝ์ ํ๋ค.
'Algorithm ๋ฌธ์ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ํ (๋ฌธ์ ํ์ด, ์ฝ๋) (0) | 2020.07.26 |
---|---|
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ์นดํซ (brute force) (0) | 2020.05.28 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ์ซ์์ผ๊ตฌ (brute force) (0) | 2020.05.28 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ์์ ์ฐพ๊ธฐ (brute force) (0) | 2020.05.24 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ๋ชจ์๊ณ ์ฌ (brute force) (0) | 2020.05.24 |
Comment