[HackerRank/C++] Manasa and Stones
2023. 2. 8. 09:04ㆍ코딩테스트 해커랭크/Algorithms -Easy
숫자 a, b가 각각 적힌 두개의 돌이 있다
n번만큼 a,b 값 둘중 하나만큼 이동했을때, 해당 위치에는 보물이 숨겨져 있다고 한다
보물이 숨겨져 있을 가능성이 있는 모든 위치를 오름차순으로 정렬해 return 한다
vector<int> stones(int n, int a, int b)
{
vector<int> result;
result.reserve(n);
if (a == b)
{
result.push_back(a * (n - 1));
return result;
}
else if (a > b)
{
int temp = a;
a = b;
b = temp;
}
for (int i = 0; i < n; ++i)
{
result.push_back(a * (n - i - 1) + b * i);
}
return result;
}
모든 경우의 수를 따질 것 없는 문제다
a + b + a + a나 a + a + a + b나 값에는 차이가 전혀 없기 때문이다
결국 같은 값을 제외한 모든 경우의 수는 n개만큼이므로 result를 n만큼 미리 reserve 해둔다
첫번째로 만약 a와 b가 같다면 나올 값은 0은 결과값에 포함하지 않으니 a * (n - 1)이 되며, 그대로 return 한다
두번째로 a와 b의 크기를 비교해 어느 값이 더 큰지 찾아내 a를 작은 값으로 두겠다
이후 오름차순으로 배열을 반환해야 하므로 a * (n - 1 - i)와 b * i를 더해준 값을 n번만큼 돌며 result에 push_back하고 return 한다
'코딩테스트 해커랭크 > Algorithms -Easy' 카테고리의 다른 글
| [HackerRank/C++] Strange Counter (0) | 2023.02.08 |
|---|---|
| [HackerRank/C++] Happy Ladybugs (0) | 2023.02.08 |
| [HackerRank/C++] Cavity Map (0) | 2023.02.08 |
| [HackerRank/C++] Fair Rations (0) | 2023.02.08 |
| [HackerRank/C++] Flatland Space Stations (0) | 2023.02.08 |