문제 출처 : CyclicRotation
N개의 정수로 구성된 배열 A가 주어집니다. 배열 회전은 각 요소가 하나의 인덱스에 의해 오른쪽으로 이동되고 배열의 마지막 요소가 첫 번째 위치로 이동됨을 의미합니다. 예를 들어, 배열 A = [3, 8, 9, 7, 6]의 회전은 [6, 3, 8, 9, 7]입니다(숫자는 한 인덱스만큼 오른쪽으로 이동하고 6은 첫 번째 위치로 이동됨).
이때, 배열 A의 각 원소들을 K번 이동했을 때의 결과값을 배열로 반환하는 문제이다.
단순하게 배열의 원소들을 K번 이동하면 되는 문제이다.
주의할 점은 마지막 요소가 도달했을 때, 다시 첫 번째 위치로 돌아가야 한다는 점이다.
마지막 요소에 도달했을 때, 남은 K번째의 위치를 구하는 방법은 간단하다.
우선 현재 인덱스에서 K를 더한다.
예를 들어 N = 3 이고, A = {1, 2, 3}, K = 5 일 때
마지막 원소인 3의 인덱스는 2이고, 5를 더하면 7이 된다.
하지만 7은 인덱스 범위를 초과한다. 이 때 배열의 길이만큼 나눈 후 나머지 값을 배열의 인덱스로 활용하면
맞아 떨어진다.
풀이를 나열해보면
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int[] solution(int[] A, int K) {
// Implement your solution here
// 1. 결과를 저장할 배열 선언
int[] answer = new int[A.length];
// 1-1. 만약 A의 길이가 1이면 K만큼 아무리 돌려도 답은 동일
if (A.length == 1) {
return new int[]{A[0]};
}
// 2. A 배열을 탐색
for(int i = 0; i < A.length; i++) {
int newIdx = i + K;
if (newIdx < A.length) {
answer[newIdx] = A[i];
} else {
answer[newIdx % A.length] = A[i];
}
}
return answer;
}
}