level0_배열 회전시키기

2024. 12. 10. 21:15파이썬_알고리즘(코딩테스트)/level0

내가 제출한 코드

def solution(numbers, direction):
    answer = []
    if direction == "right":
        answer.append(numbers[-1])  
        answer.extend(numbers[:-1])  
    else:
        
        answer.extend(numbers[1:])  
        answer.append(numbers[0])  
    return answer
  • answer.extend(numbers[:-1]) # 나머지 요소들을 추가
  • answer.extend(numbers[1:]) # 첫 번째 요소를 제외한 나머지를 추가

나는 extend랑 append가 헷갈려서 정리차 적어보았다.

numbers = [1, 2, 3, 4]
answer = []

# extend 사용
answer.extend(numbers[1:])
print(answer)
# 출력: [2, 3, 4]  # 각 요소가 추가됨

# append 사용
answer.append(numbers[1:])
print(answer)
# 출력: [[2, 3, 4]]  # 리스트 자체가 추가됨

 

다른 사람이 제출한 코드1

def solution(numbers, direction):
    return [numbers[-1]] + numbers[:-1] if direction == 'right' else numbers[1:] + [numbers[0]]

 

두 줄로..도 가능하구낭...

그리고 리스트끼리의 덧셈 ... 까먹고 있었다..

여기서 주의사항은 리스트 덧셈은 새로운 리스트를 생성하기 때문에, 덧셈 연산이 많아지면 성능에 영향을 줄 수 있다고 한다.

 

다른 사람이 제출한 코드2

from collections import deque

def solution(numbers, direction):
    numbers = deque(numbers)
    if direction == 'right':
        numbers.rotate(1)
    else:
        numbers.rotate(-1)
    return list(numbers)
  • collections 모듈의 deque(덱)를 사용하여 리스트를 지정된 방향으로 간편하게 회전시키는 함수이다.
  • numbers = deque(numbers)
    • 여기서는 numbers 리스트를 덱으로 변환한다.
    • 덱은 회전(rotate) 기능을 제공하므로, 리스트 회전 작업을 간단히 수행할 수 있다.
  • numbers.rotate()
    • 덱을 n칸 회전한다.
    • n > 0: 오른쪽으로 n칸 이동
    • n < 0: 왼쪽으로 n칸 이동.

 

우와 사람들 진짜... 똑똑하다. deque, rotate... 노트에 다시 기록해둬야겠다.