본문 바로가기
Algorithm/💼Codility

[Lesson 2] CyclicRotation

by yewoneeee 2024. 7. 27.

문제


 

코드


fun solution(A: IntArray, K: Int): IntArray {
    val rotated = IntArray(A.size)
    for (i in A.indices) {
        rotated[(i + K) % (A.size)] = A[i]
    }
    return rotated
}

fun main() = with(System.`in`.bufferedReader()) {
    val a = readLine().split(' ').map { it.toInt() }.toIntArray()
    val k = readLine().toInt()
    println(solution(a, k).contentToString())
}

문제를 IDE 환경에서도 풀 수 있도록 main 함수를 추가한 것

문제에선 solution 함수만 제출해도 됨

 

풀이


우선 문제는 주어진 배열 A를 K번 만큼 오른쪽으로 회전시키는 것이다.

[1, 2, 3]을 2번 회전하면 [3, 1, 2] -> [2, 3, 1] 의 과정을 거쳐 결과는 [2, 3, 1]이 된다.

 

바로 먼저 생각이 든 것은 문자열에다가 마지막 문자를 삭제하고, 해당 문자를 맨 앞으로 붙이는 방법이었다.

이렇게 하면 숫자가 한 자리 수가 아닌 경우엔 더 복잡해질 것 같아서 금방 포기했다.

 

자료구조를 사용해야 하나 싶었는데, 인덱스로도 해결이 될 것 같았다.

단순하게 나머지 연산을 이용해서 회전 후의 인덱스 위치를 계산해서 한 번에 위치를 찾아주면 될 것 같다 생각했다.

 

구현 자체도 어렵진 않았다.

IDE를 사용하지 않고 사이트 내에서만 코딩하는 연습도 해봤다.

테스트 케이스들을 통과하고 바로 제출했다.

 

 

입문자 용이라서 그런지 꽤나 쉬운 것 같다.

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

[Lesson 2] OddOccurrencesInArray  (0) 2024.07.28
[Lesson 1] Binary Gap  (0) 2024.07.26

댓글