[HackerRank/C++] Circular Array Rotation
2023. 2. 6. 08:09ㆍ코딩테스트 해커랭크/Algorithms -Easy
배열 a가 있을때 k만큼 배열 a를 오른쪽으로 밀어낸다
넘어간 a의 값은 다시 0번 인덱스로 돌아와 순환적 구조를 가지게 된다
이렇게 밀어진 a의 배열이 있을때, queries 배열에 있는 값으로 a 배열의 인덱스에 접근해 해당 값 배열을 return 한다
vector<int> circularArrayRotation(vector<int> a, int k, vector<int> queries)
{
vector<int> temp;
temp.reserve(a.size());
int push = k % a.size();
for (int i = 0; i < a.size(); ++i)
{
temp.push_back(a[(a.size() + i - push) % a.size()]);
}
for (int i = 0; i < queries.size(); ++i)
{
queries[i] = temp[queries[i]];
}
return queries;
}
첫번째로 temp vector를 하나 생성해 밀려난 후 새로운 값을 담아준다
같은 vector에서 밀어낼 때마다 계속 값이 이동하며 연산을 할 것이므로 새로운 vector를 준비해 새로 담아내는게 훨씬 효율적이라고 생각했다
밀어내는 것은 순환이므로 k를 a.size()로 나눠 몇번의 push가 필요할지 값을 구한다
이후 a의 배열을 돌며 push 로 밀어낸 인덱스의 값들을 a.size()로 나머지를 구해 새로 temp vector에 담아준다
이후 queries vector를 순회하며 해당 queries의 값으로 temp 인덱스에 접근해 값을 찾아낸 후 vector를 return 한다
'코딩테스트 해커랭크 > Algorithms -Easy' 카테고리의 다른 글
| [HackerRank/C++] Jumping on the Clouds: Revisited (0) | 2023.02.06 |
|---|---|
| [HackerRank/C++] Sequence Equation (0) | 2023.02.06 |
| [HackerRank/C++] Save the Prisoner! (0) | 2023.02.06 |
| [HackerRank/C++] Viral Advertising (0) | 2023.02.06 |
| [HackerRank/C++] Beautiful Days at the Movies (0) | 2023.02.06 |