문제 설명
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ numbers의 길이 ≤ 100
- 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합니다.
function solution(numbers, direction) {
let saveNum = numbers[numbers.length-1]
if(direction === 'right'){
numbers.unshift(saveNum)
numbers.splice(numbers.length-1, numbers.length)
}else{
saveNum = numbers[0]
numbers.shift()
numbers.splice(numbers.length, numbers.length, saveNum)
}
return numbers
}
저는 이문제를 해결할때에, saveNum이라는 변수를 하나 만들어주고, saveNum함수에 numbers의 맨 끝 값을 저장해주었습니다. 그리고 만약 direction이 right이면, numbers의 맨 앞에 saveNum에 저장되어있는 값을 넣어주고, 맨뒤의 값을 빼주는 걸로 해결하였고, 만약 left라면 맨 앞의 인덱스의 값을 saveNum에 저장시켜주고, shift()로 맨앞의 값을 제거해주고, splice를 사용해 saveNum의 저장되어있는 변수값을 넣어 주는것으로 해결 하였습니다.
function solution(numbers, direction) {
const numberLength = numbers.length;
let saveNum = numbers[numberLength-1];
if(direction === 'right'){
numbers.unshift(saveNum);
numbers.splice(numberLength, numberLength);
}else{
saveNum = numbers[0]
numbers.shift()
numbers.splice(numberLength, numberLength, saveNum)
}
return numbers
}
또 매번 numbers의 length를 구해와라 라고하는 방법이 메모리 영역에서 좋지 않을것 같아 변수를 할당해줬습니다.
그렇지만 코드가 쓸데없이 긴 감이있어 다른분들의 코드에서 조금더 효율적으로 구현해내는 방법을 공부 했습니다.
function solution(numbers, direction) {
return direction === "right"
? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]
: [...numbers.slice(1), numbers[0]];
}
저의 엄청 긴 코드를 간단하게 3줄로 구현할수가 있다는 것을 느끼고 공부를 더 열심히 해야겠다라고 생각했습니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 암호 해독 (0) | 2022.11.12 |
---|---|
[코딩테스트]주사위의 개수 (0) | 2022.10.27 |
[코딩테스트] 순서쌍의 개수 (0) | 2022.10.18 |
[코딩테스트] 배열의 유사도 (0) | 2022.10.15 |
[코딩테스트] 제곱수 판별하기 (0) | 2022.10.15 |