# Left Rotation (Arrays)
[문제]
[코드]
vector<int> rotateLeft(int d, vector<int> arr) {
vector<int> result(arr.size());
int i, j;
for(i = 0; i < arr.size(); i++)
{
j = (i+d) % arr.size();
result[i] = arr[j];
}
return result;
}
[코드설명]
주어진 array를 left rotate 연산하는 문제다.
arr내에서 해결하지 않고 추가 배열을 사용해서 해결했다.
arr와 동일한 크기의 result 벡터를 만들었다.
result 벡터에 arr 벡터의 값을 복사하기 위해 for 반복문으로 벡터의 크기만큼 반복하도록 했다.
result의 첫 번째 인덱스부터 값을 채우려고 했고, 그러기 위해서 result[i]에 arr[i+d]의 값을 저장하려고 했다.
이때 i+d의 값이 인덱스의 범위를 넘어서는 경우를 대비해 (i+d) % arr.size()를 j에 저장하고 이를 arr 벡터의 인덱스로 사용했다.
[채점 결과]
# Dynamic Array (Arrays)
[문제]
[코드]
vector<int> dynamicArray(int n, vector<vector<int>> queries) {
int i, j, k, x, y, pos = 0, lastAnswer = 0;
vector<vector<int>> arr(n);
vector<int> result;
for(i = 0; i < queries.size(); i++)
{
x = queries[i].at(1);
y = queries[i].at(2);
switch(queries[i].at(0))
{
case 1:
j = (x ^ lastAnswer) % n;
arr[j].push_back(y);
break;
case 2:
j = (x ^ lastAnswer) % n;
k = y % arr[j].size();
lastAnswer = arr[j][k];
result.push_back(lastAnswer);
}
}
return result;
}
[코드설명]
동적배열로 해결하는 문제다.
필자는 C++로 벡터를 사용해서 해결했다.
쿼리1의 연산 결과를 저장할 벡터 arr를 생성하고, 쿼리2의 연산 결과를 출력하기 위한 벡터 result를 생성했다.
queries[i] 벡터에서 1과 2열에 있는 값을 각각 x와 y에 저장했다.
queries[i].at(0)의 값이 1인지 2인지에 따라 연산을 달리 하기 위해 switch문을 사용했다.
값이 1이면 idx의 값(j)을 구해서 arr[j]에 y의 값을 삽입한다.
값이 2이면 위와 똑같이 idx의 값(j)을 구하고, 열의 인덱스(k)의 값을 구해서 arr[j][k]의 값을 lastAnswer로 지정한다.
lastAnswer의 값은 result 벡터에 추가한다.
[채점 결과]
'알고리즘' 카테고리의 다른 글
[HackerRank] Insert a node at a specific position in a linked list / Compare two linked lists (0) | 2021.07.19 |
---|---|
[HackerRank] Print in Reverse / Delete a Node (0) | 2021.07.18 |
[HackerRank] Jesse and Cookies / Insertion Sort - Part 1 (0) | 2021.07.09 |
[HackerRank] QHEAP1 / Quicksort 1 - Partition (0) | 2021.06.27 |
[HackerRank] Tree: Level Order Traversal / Binary Search Tree : Insertion (0) | 2021.06.26 |