Posis

[프로그래머스] 배열 회전시키기 본문

알고리즘/프로그래머스

[프로그래머스] 배열 회전시키기

CooNiHong 2022. 12. 7. 20:25

문제 링크

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

 

프로그래머스

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

programmers.co.kr

문제 설명

정수가 담긴 배열 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합니다.

나의 풀이

Java

import java.util.ArrayList;
class Solution {
    public int[] solution(int[] numbers, String direction) {
        ArrayList<Integer> numArray = new ArrayList<>();
        for(int i : numbers) {
            numArray.add(i);
        }

        switch(direction) {
            case "right":
                numArray.remove(numArray.size() - 1);
                numArray.add(0, numbers[numbers.length - 1]);
                break;
            case "left":
                numArray.remove(0);
                numArray.add(numbers[0]);
                break;
        }

        int[] answer = new int[numArray.size()];
        for(int i = 0; i < numArray.size(); i++) {
            answer[i] = numArray.get(i);
        }

        return answer;
    }
}

// 방법 2
class Solution {
    public int[] solution(int[] numbers, String direction) {
        int[] answer = new int[numbers.length];
		if(direction.equals("right")) {
			for(int i = 0;i<numbers.length;i++) {
				if(i==numbers.length-1) answer[0] = numbers[numbers.length-1];
				else answer[i+1] = numbers[i];
			}
		}
		else {//left
			for(int i = numbers.length-1;i>=0;i--) {
				if(i==0) answer[numbers.length-1] = numbers[0];
				else answer[i-1] = numbers[i];
			}
		}
        return answer;
    }
}

첫번째 방법은 0.03ms ~ 0.06ms의 시간으로 통과하고 두번째 방법은 0.02ms로 모두 통과

JavaScript

function solution(numbers, direction) {
    let answer = [];
    let temp1 = numbers[0];
    let temp2 = numbers[numbers.length - 1];
    switch(direction) {
        case "right":
            numbers.unshift(temp2);
            numbers.pop();
            break;
        case "left":
            numbers.shift();
            numbers.push(temp1);
            break;
    }
    return numbers;
}

JavaScript는 배열의 맨앞과 맨뒤의 요소를 제거하고 추가하는 메서드가 존재함

728x90