๐
2025-07-26
๋ฌธ์ ์ค๋ช
์์ฐ์ x๋ฅผ y๋ก ๋ณํํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
x + n
x * 2
x * 3
์์ฐ์ x, y, n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, x๋ฅผ y๋ก ๋ณํํ๊ธฐ ์ํด ํ์ํ ์ต์ ์ฐ์ฐ ํ์๋ฅผ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ์ด๋ x๋ฅผ y๋ก ๋ง๋ค ์ ์๋ค๋ฉด -1์ return ํด์ฃผ์ธ์.
์ ํ์ฌํญ
1 โค x โค y โค 1,000,000
1 โค n < y
์ฌ๊ท๋ก ํ์์ง๋ง ์๊ฐ์ด๊ณผ ๋ฐ์
#include <vector>
#include <algorithm>
using namespace std;
int cal(int x, const int& y, const int& n, int count)
{
if (x > y) return -1;
if (x == y) return count;
vector<int> result;
int temp = cal(x + n, y, n, count+1);
if (temp > -1) result.push_back(temp);
temp = cal(x * 2, y, n, count+1);
if (temp > -1) result.push_back(temp);
temp = cal(x * 3, y, n, count+1);
if (temp > -1) result.push_back(temp);
if (result.size() == 0) return -1;
else return *min_element(result.begin(), result.end());
}
int solution(int x, int y, int n) {
int answer = 0;
answer = cal(x, y, n, 0);
return answer;
}
๋ฉ๋ชจ์ด์ ์ด์ ์ผ๋ก ์ ๊ทผ
#include <vector>
using namespace std;
int solution(int x, int y, int n) {
int answer = 0;
vector<int>result(y+1, y);
result[x] = 0;
for(int i=x; i<=y; i++)
{
int temp = i+n;
if(temp<=y)
{
result[temp] = result[i]+1>result[temp]?result[temp]:result[i]+1;
}
temp = i*2;
if(temp<=y)
{
result[temp] = result[i]+1>result[temp]?result[temp]:result[i]+1;
}
temp = i*3;
if(temp<=y)
{
result[temp] = result[i]+1>result[temp]?result[temp]:result[i]+1;
}
}
answer = result[y]==y? -1: result[y];
return answer;
}
ํญ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌธ์ ๋ค. ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๊ฒ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ๋ง์ด ํด์ผ๊ฒ ๋ค.
์ถ์ฒ ํ๋ก๊ทธ๋๋จธ์ค: ์ซ์ ๋ณํํ๊ธฐ