본문 바로가기
Algorithm/Codility

[Codility] CyclicRotation 파이썬 풀이

by daewooki 2024. 1. 23.
반응형

문제 링크: https://app.codility.com/programmers/lessons/2-arrays/

문제

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] (elements are shifted right by one index and 6 is moved to the first place).

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:

def solution(A, 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].

 

 

배열을 순환 시킬 것인데 배열의 길이보다 K가 클 때에는 반복이라는 것을 생각하고 나머지만을 통해서 배열을 회전시키면 되는 문제입니다.

코드

1
2
3
4
5
6
7
8
9
10
def solution(A, K):
    if K==len(A) or K==0:
        return A
    else:
        m = K%len(A)
        arr = []
        arr.extend(A[-m:])
        arr.extend(A[:-m])
        return arr
cs

 

 

여기서 주요한 부분은 다음과 같습니다.

1. if K==len(A) or K==0:: 만약 K가 리스트 A의 길이와 같거나 0이라면, 리스트 A를 그대로 반환합니다. 왜냐하면 K가 A의 길이와 같으면 어떤 회전도 발생하지 않기 때문이고, K가 0이면 원래 리스트와 동일한 리스트를 반환해야 하기 때문입니다.

 

2. m = K%len(A): 회전 횟수 K를 리스트 A의 길이로 나눈 나머지를 구합니다. 이렇게 하는 이유는, K가 A의 길이보다 클 경우에는 여러 번 회전한 것과 같은 효과를 얻기 위함입니다.

3. arr.extend(A[-m:]): 리스트 A에서 뒤에서부터 m개의 요소를 가져와 arr 리스트에 추가합니다. 이는 원래 리스트의 뒤로 이동한 요소들을 나타냅니다.

4. arr.extend(A[:-m]): 리스트 A에서 처음부터 끝에서 m개를 제외한 요소들을 arr 리스트에 추가합니다. 이는 원래 리스트의 앞으로 이동한 요소들을 나타냅니다.

 

배열이 빈 경우도 있기 때문에 예외처리까지 해주어야 합니다.

 

 

반응형

'Algorithm > Codility' 카테고리의 다른 글

[Codility] BinaryGap 파이썬 풀이  (0) 2024.01.23

댓글