<문제 설명>
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤ numbers의 길이 ≤ 20
- direction은 "left" 와 "right" 둘 중 하나입니다.
입출력 예numbersdirectionresult
[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합니다.
<제출 답안>
계속 안되서 순서 대충 적음
1. 맨 뒤 숫자를 빼낸다.
2. 모든 숫자를 한칸식 뒤로 옮긴다.
3. 맨 뒤 빼낸 숫자를 맨 앞에 붙인다.
각 순서를 구현내줄 만한 함수를 찾아서~~
-slice(자르고 싶은 곳 시작, 자르고 싶은 곳 끝지점+1)
-splice(자르고 싶은 곳 시작, 삭제할 갯수, 대체할 내용) -> 적용시킨 배열을 출력하면 변경되서 출력
slice는 그저. 자른 것들만을 모아 만든 배열을 출력 (slice로 편집당한 기존 배열의 '요소'들을 출력)
splice는 아예 기존 배열의 요소를 바꾸거나, 빈 공간으로 만들어서 출력(splice로 편집된 상태의 '기존 배열'을 출력)
function solution(numbers, direction) {
const x = numbers.slice(numbers.length-1)
const y = numbers.slice(0,1)
if(direction == 'right'){
for(let i= numbers.length-1; i >= 1; i--) {
numbers[i] = numbers[i-1]
}
numbers[0] = Number(x)
}else {
for(let i = 0; i<= numbers.length-2; i++ ){
numbers[i] = numbers[i+1]
}
numbers[numbers.length-1] = Number(y)
}
return numbers
}
코드가 복잡하다. 알고리즘 강의해서 강사님이 설명한대로 구현해보았다.
이 '배열회전시키기' 문제는 java 백준 때 나와 악연이였고 못 풀어냈으나, 여기 js에서는 좀 오래 걸렸지만 내스스로 끝장을 봤다.
아니... return numbers.unshift(numbers.pop()) 시험삼아 해줬더니 pop한 3만 나오길래 안되는 줄 알았더니..
이렇게 넣어주면 되는 것이었다... 알아서 한칸씩 밀어주네..ㅎㅎ;
function solution(numbers, direction) {
var answer = [];
if ("right" == direction) {
numbers.unshift(numbers.pop());
} else {
numbers.push(numbers.shift());
}
answer = numbers;
return answer;
}
'🗃️javascript > 프로그래머스' 카테고리의 다른 글
가장 큰 수 찾기(Lv.0)[reduce()와 Math.max()로 배열에서 가장 큰 값 찾기] (0) | 2023.01.05 |
---|---|
외계행성의 나이(Lv.0)[문자열 활용문제 -> 문자+ 문자 = 문자열] (0) | 2023.01.04 |
약수 구하기(Lv.0)[for문 if문을 map()과 filter()로 변경](Array, fill 알아보기) (0) | 2023.01.04 |
나머지가 1이 되는 수 찾기(Lv.1)[반복문 안의 return 값] (0) | 2023.01.04 |
문자열을 정수로 바꾸기(Lv.1)[문자열과 숫자의 사칙연산 결과 = 숫자] (0) | 2023.01.04 |