
문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
존 왓슨은 정수 배열이 오른쪽 원형 회전이라 불리는 작업을 알고 있다. 한 번의 회전 작업은 마지막 배열 요소가 첫 번째 위치로 이동하고 나머지 요소들은 오른쪽으로 한번씩 이동한다. 셜록의 능력 테스트를 위해 왓슨은 셜록에게 정수형 배열을 제공한다. 셜록은 여러 번 위치를 변경하고 주어진 위치의 값을 결정한다.
각 배열은 오른쪽 원형 회전을 여러 번 실행하고 주어진 위치의 값을 반환해라.
a = [3, 4, 5]
k = 2
queries = [1, 2]
k는 a를 움직일 횟수이고, queries는 반환해야 할 값들의 위치이다. 처음 위치를 두 번 움직인다. [3, 4, 5] -> [5, 3, 4] -> [4, 5, 3]
queries에 있는 요소는 0부터 시작하고, 1번 위치와 2번 위치의 값을 반환한다.
a[1] = 5
a[2] = 3
circularArrayRotation 함수를 완성해라.
circularArrayRotation 함수는 아래와 같은 매개변수를 가지고 있다.
반복문을 통해 주어진 배열의 값을 k번동안 위치를 옮긴다. Javascript는 pop이 있어서 바로 마지막 요소의 값을 가져오는 것과 삭제하는 것을 동시에 할 수 있지만 Java는 분리해서 수행해야한다.
for(int i = 0; i < k; i++){
int unshift = a.get(a.size() - 1);
a.remove(a.size() - 1);
a.add(0, unshift);
}
반환할 List를 생성하고, 다시 반복문을 사용해 주어진 위치의 값을 반환할 List에 넣어준다. 마지막으로 List를 반환한다.
List<Integer> result = new ArrayList<>();
for(int i = 0; i < queries.size(); i++){
result.add(a.get(queries.get(i)));
}
return result;
public static List<Integer> circularArrayRotation(
List<Integer> a,
int k,
List<Integer> queries
) {
for(int i = 0; i < k; i++){
int unshift = a.get(a.size() - 1);
a.remove(a.size() - 1);
a.add(0, unshift);
}
List<Integer> result = new ArrayList<>();
for(int i = 0; i < queries.size(); i++){
result.add(a.get(queries.get(i)));
}
return result;
}