let's get IT with DAVINA 💻

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

DEV_IN/문제풀이

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

다빈치코드💎 2023. 3. 20. 19:47

❓ 문제 설명

정수가 담긴 배열 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]

❗️비니's 풀이

TRY 1.

numbers배열을 반복시키며 인덱스 값을 바꿔주려 생고생을 했는데 계속 로직이 떠오르지가 않았다..

function solution(numbers, direction) {
    let arr=[];
    if(direction==="right"){
        for(let i=0;i<numbers.length;i++){
            numbers[i]=numbers[i-1]
            arr.push(numbers[i]);
            if(i-1<0){
                i=numbers.length-1;
            }
        }
    }
    if(direction==="left"){
        for(let i=0;i<numbers.length+1;i++){
            numbers[i]=numbers[i+1]
            arr.push(numbers[i]);
            if(i>numbers.length-1){
                arr.push(numbers[0]);
            }
        }
    }
    return arr;
}

TRY 2.

기어이 다른 사람들의 풀이를 조금 참고해서 push와 unshift를 이용해서 조정해보자 생각이 들어서 다시 코드를 짜봤다..

function solution(numbers, direction) {
    let res=[];
    if(direction==="right"){
        res.unshift(numbers[numbers.length-1]);
        for(let i=0;i<numbers.length-1;i++)
        res.push(numbers[i]);
    }
        if(direction==="left"){
        for(let i=1;i<numbers.length;i++)
        res.push(numbers[i]);
        res.push(numbers[0]);
    }
    return res;
}

👀 others' 풀이

어쨌건 "left"이건 "right"이건 한칸씩 밀린다는 생각보다 right는 맨끝에꺼가 앞으로 오고 left는 맨 앞에꺼가 뒤로 간다로 생각 바꾸기.. 나머지는 알아서 정렬되는데 왜 이 생각이 그렇게 안떠오르는지 모르겠댜.. 0단계인데ㅠㅠ

function solution(numbers, direction) {
    var answer = [];

    if ("right" == direction) {
        numbers.unshift(numbers.pop()); //맨 뒤에꺼 삭제하고 맨 앞으로 가져와!
    } else {
        numbers.push(numbers.shift()); //맨 앞에꺼 삭제하고 맨 뒤로 보내! 그러면 나머지는 알아서 정렬..
    }

    answer = numbers;

    return answer;
}
Comments