[Codility] Lesson 2 CyclicRotation 파이썬

현지·2025년 12월 16일

코테 준비

목록 보기
2/10

문제풀이

배열 A와 정수 K가 주어지면, 배열 A의 원소들을 K번 오른쪽으로 옮기는 문제이다.

조건이 복잡하지 않고 단순히 모든 원소를 다음칸으로 한 칸씩 회전시킨다는 조건에 처음엔 인덱스를 이용해서 [현재 인덱스 + 1]로 자리를 재지정하면 될려나 라고 생각했다. 근데 간단하게 생각하면 결론적으로 회전한 듯한 모양새만 만들면 되는 것이니 마지막 원소를 떼서 앞에다 붙이면 되는거 아닌가?라는 생각이 들었다.

def solution(A, K):

    for i in range(K):
        last_num = A.pop() # 맨 뒤의 원소 떼서
        A.insert(0, last_num) # 맨 앞에 붙여넣기

    return A

그래서 이렇게 초단순하게 코드를 짰는데 테스트 케이스 3개가 다 통과하는것이 아닌가. 그래서 설마 하는 마음으로 제출해봤는데.

역시 최종 테스트 코드를 100% 통과하진 않았다.

트러블 슈팅

통과하지 못한 테스트 케이스를 살펴보니

 File "/tmp/exec_user_s3cqt9mm/solution.py", line 7, in solution
    last_num = A.pop()
               ^^^^^^^
IndexError: pop from empty list

라는 에러 메시지로, 빈 배열이 주어졌을때 pop()을 해서 생긴 문제 같았다.

최종 제출 코드

주어진 배열이 빈 배열일 경우 예외처리하는 코드를 추가하였다.

def solution(A, K):

    if len(A) == 0:
        return A
        
    for i in range(K):
        last_num = A.pop()
        A.insert(0, last_num)

    return A

잘 풀었다고 생각했는데 생각지도 못한 예외였다... 앞으로 좀 더 꼼꼼히 예외 케이스를 생각해보아야 할 것 같다.

profile
헤맨만큼 내 땅이다

0개의 댓글