본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 | 파이썬 / 자바스크립트] 배열 회전시키기(코딩테스트 입문/ level 0)

by 청량리 물냉면 2023. 2. 24.
반응형
문제

https://school.programmers.co.kr/learn/courses/30/lessons/120844

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🐍파이썬
def solution(numbers, direction):
    if direction == "right":
        numbers.insert(0, numbers.pop())
    else:
        numbers.append(numbers.pop(0))
    return numbers

1️⃣ direction이 right인 경우, 0번째 인덱스에 numbers.pop() 데이터를 삽입

2️⃣ direction이 left인 경우, 배열의 마지막에 numbers.pop(0) 데이터를 삽입

 

 

다른 풀이 방법

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

배열 슬라이싱 사용


from collections import deque
def solution(numbers, direction):
    numbers = deque(numbers)
    if direction == 'right':
        numbers.rotate(1)
    else:
        numbers.rotate(-1)
    return list(numbers)

rotate()

  • deque 자료구조에서 사용할 수 있는 함수
  • 사용 예시
    • rotate(1): 오른쪽으로 한 칸 이동
    • rotate(-3): 왼쪽으로 세 칸 이동

 

🐥자바스크립트
function solution(numbers, direction) {
    if (direction === "right"){
        numbers.splice(0, 0, numbers.pop());
    } else {
        numbers.push(numbers.shift());
    } 
    return numbers;
}

 배열에 요소를 추가/제거하는 메서드

  • 🛑 원본 배열의 변형 발생
  • push() : 배열의 끝에 하나 이상의 새로운 요소를 추가한 후, 배열의 새로운 길이를 반환
  • pop() : 배열의 마지막 요소를 제거하고, 그 요소를 반환
  • unshift() : 배열의 첫 번째 자리에 새로운 요소를 추가하고, 배열의 새로운 길이를 반환
  • shift() : 배열의 첫 번째 요소를 제거하고, 제거된 요소를 반환

 

다른 풀이 방법

function solution(numbers, direction) {
  return direction === "right"
    ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]
    : [...numbers.slice(1), numbers[0]];
}

[...numbers, ...numbers] 로 배열을 이을 수 있다.

[numbers, numbers]의 경우 배열의 원소로 배열이 들어가 이차원 배열이 된다.


function solution(numbers, direction) {
    // numbers = [1, 2, 3] 일때
    console.log([numbers, numbers]); 	// [[1, 2, 3], [1, 2, 3]]
    console.log([...numbers, ...numbers]); 	// [1, 2, 3, 1, 2, 3]
    return 0;
}

 

반응형