Arrays: Left Rotation

HeeSeong·2021년 6월 28일
1

HackerRank

목록 보기
6/18
post-thumbnail

🔗 문제 링크

https://www.hackerrank.com/challenges/ctci-array-left-rotation/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays


❔ 문제 설명


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

  • int a'[n]: the rotated array

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].


⚠️ 제한사항


  • 1n1051 ≤ n ≤ 10^5

  • 1dn1 ≤ d ≤ n

  • 1a[i]1061 ≤ a[i] ≤ 10^6



💡 풀이 (언어 : Java)


자바에서는 큐를 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));
	}
}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글