let's get IT with DAVINA 💻
[프로그래머스]Lv0. 배열 회전시키기 본문
❓ 문제 설명
정수가 담긴 배열 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;
}
'DEV_IN > 문제풀이' 카테고리의 다른 글
[프로그래머스]Lv2. 최솟값 만들기 (0) | 2023.03.21 |
---|---|
[백준 #4949] 균형잡힌 세상 (2) | 2023.03.21 |
[프로그래머스]Lv2. JadenCase 문자열 만들기 (0) | 2023.03.20 |
[프로그래머스]Lv2. 최댓값과 최솟값 (2) | 2023.03.18 |
[프로그래머스]Lv0. 공 던지기 (0) | 2023.03.18 |
Comments