【Codility Lesson2】CyclicRotation

Codility의 추천 ~JavaScript로 해결하는 알고리즘~ 의 실천편입니다.

문제



An array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, the rotation of array A = [3 , 8, 9, 7, 6] is 6, 3, 8, 9, 7 .

The goal is to rotate array A K times; that is, each element of A will be shifted to the right K times.

Write a function:

class Solution { public int[] solution(int[] A, int K); }

that, given an array A consisting of N integers and an integer K, returns the array A rotated K times.

For example, given
A = [3, 8, 9, 7, 6]
K = 3

the function should return [9, 7, 6, 3, 8]. Three rotations were made:
[3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7]
[6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9]
[7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8]

For another example, given
A = [0, 0, 0]
K = 1

the function should return [0, 0, 0]

Given
A = [1, 2, 3, 4]
K = 4

the function should return [1, 2, 3, 4]

Assume that:

N and K are integers within the range [0..100];
each element of array A is an integer within the range [−1,000..1,000].
In your solution, focus on correctness. The performance of your solution will not be the focus of the assessment.

어휘 메모


  • integer 정수
  • rotate array A K times arrayA를 K회 회전
  • Write a function: (:아래) 함수 작성
  • Assume that: (that:다음을) 가정하십시오

  • 해법



    1. pop() 및 unshift() 사용



    pop() 메서드는 배열에서 마지막 요소를 제거하고 제거한 요소를 반환합니다.
    unshift() 메서드는 배열의 시작 부분에 하나 이상의 요소를 추가하고 새 배열의 길이를 반환 값으로 반환합니다.
    또, pop(), unshift() 모두 파괴적인 메소드 (=원래의 배열을 직접 변화시킨다)인 것에 유의해 주세요.

    배열 A, 회전수 K를 인수로 한 함수를 만듭니다.
    변수 i에 초기값으로 0을 대입합니다.
    A.pop()로 배열 A의 마지막 요소를 꺼내 A.unshift(A.pop())로 배열 A의 마지막 요소를 첫 번째 요소로 추가한 새로운 배열 A를 만듭니다. 이것을 while 문으로 K 회 반복합니다.
    function solution(A, K) {
        // write your code in JavaScript (Node.js 8.9.4)
        let i = 0;
        while(i < K) {
            A.unshift(A.pop())
            i++
        }
    
        return A
    }
    

    for문을 사용할 때는 이쪽.
    function solution(A, K) {
        // write your code in JavaScript (Node.js 8.9.4)
        for(let i = 0; i < K; i++) {
            A.unshift(A.pop())
        }
    
        return A
    }
    
    

    2.pop() 대신 slice() 사용


    function solution(A, K) {
      if (A.length >= K) {
        A.unshift(...A.splice(-K));
      } else {
        let i = 0;
        while (i < K) {
          A.shift(A.splice(-1));
          i++;
        }
      }
      return A;
    }
    
    // line 4: To add the elements of that array to the start of nums (instead of the array itself) we use the spread operator: ...nums.splice(-K)
    

    참고



    알고리즘 도감 그림에서 보는 26개의 알고리즘 세계에서 가장 강력한 9 알고리즘 어쨌든! 알고리즘 최초의 JavaScript 제3판 ―ES2015 이후의 최신 웹 개발 철저한 예해 로얄 영문법 개정 신판

    좋은 웹페이지 즐겨찾기