배열 회전시키기
2024. 8. 4. 18:00ㆍ코딩테스트 입문
https://school.programmers.co.kr/learn/courses/30/lessons/120844
문제 설명
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤ numbers의 길이 ≤ 20
- direction은 "left" 와 "right" 둘 중 하나입니다.
입출력 예
numbers | direction | result |
[1, 2, 3] | "right" | [3, 1, 2] |
[4, 455, 6, 4, -1, 45, 6] | "left" | [455, 6, 4, -1, 45, 6, 4] |
입출력 예 설명
입출력 예 #1
- numbers 가 [1, 2, 3]이고 direction이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return합니다.
입출력 예 #2
- numbers 가 [4, 455, 6, 4, -1, 45, 6]이고 direction이 "left" 이므로 왼쪽으로 한 칸씩 회전시킨 [455, 6, 4, -1, 45, 6, 4]를 return합니다.
배열을 direction 방향으로 한 칸씩 미루는 문제입니다.
이런 문제들을 보면 numbers 배열을 2개 이어 붙인 다음에
1. left라면 1부터 len(numbers)만큼 슬라이싱한다.
2. right라면 len(numbers) - 1부터 len(numbers)만큼 슬라이싱한다.
이 2가지면 해결되지 않을까 생각이 드네요.
이 방법으로 문제를 풀어보도록 하겠습니다.
def solution(numbers, direction):
if direction == "left":
return (numbers * 2)[1:1+len(numbers)]
else:
return (numbers * 2)[len(numbers) - 1:2 * len(numbers) - 1]
파이썬에서는 collections 패키지에서 deque을 제공합니다.
이 deque에는 rotate라는 함수가 있는데, 이게 우리가 푸는 문제처럼 -1은 왼쪽으로 밀어내고, 1은 오른쪽으로 밀어냅니다. 큐 자체는 유지하면서요.
# deque 구조를 가져옵니다.
from collections import deque
def solution(numbers, direction):
# queue를 생성합니다.
queue = deque(numbers)
# 왼쪽으로 밀어냅니다.
if direction == "left":
queue.rotate(-1)
# 오른쪽으로 밀어냅니다.
else:
queue.rotate(1)
return list(queue)
따라서 이렇게 deque 구조를 사용하여 문제를 풀 수도 있습니다.