A left rotation operation on an array shifts each of the array's elements unit to the left. For example, if left rotations are performed on array [1, 2, 3, 4, 5], then the array would become [3, 4, 5, 1, 2]. Note that the lowest index item moves to the highest index in a rotation. This is called a circular array.
Given an array a of n integers and a number, d, perform d left rotations on the array. Return the updated array to be printed as a single line of space-separated integers.
Function Description
Complete the function rotLeft in the editor below.
rotLeft has the following parameter(s):
int a[n]: the array to rotate
int d: the number of rotations
Returns
Input Format
The first line contains two space-separated integers n and d, the size of a and the number of left rotations.
The second line contains n space-separated integers, each an a[i].
자바에서는 큐를 LinkedList를 이용해서 구현해 사용한다. 사이클 횟수만큼 반복횟수에서 나눈 나머지를 사용해서 계산양을 줄였고, 큐를 이용해서 해당 횟수 만큼 첫번째 원소를 뽑아 뒤에 넣어주는 과정을 반복했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
public class Main {
private static String rotLeft (int n, int d, LinkedList<String> numList) {
// n번 마다 원래대로 돌아오는 사이클이라 n으로 나눈 나머지만큼 옮겨주면 된다
int rotate = d % n;
// 큐를 이용해서 왼쪽에서 빼서 오른쪽에 넣어준다
for (int i = 0; i < rotate; i++) {
numList.add(numList.poll());
}
// 리스트의 원소를 스트림으로 바꾸고 String 값으로 변환후 문자열로 사이에 공백넣어 join
return numList.stream().map(String::valueOf).collect(Collectors.joining(" "));
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
// 숫자 문자열을 배열로 만들고 그다음 리스트로 만들고 그것을 LinkedList(큐)로 변환
LinkedList<String> numList = new LinkedList<String>(Arrays.asList(br.readLine().split(" ")));
System.out.println(rotLeft(n, d, numList));
}
}