반응형
1. 문제
- 배열 nums와 정수 k가 주어질 때, 배열을 k번 오른쪽으로 밀었을 때 결과를 nums를 수정하라.
2. 해결
/**
Do not return anything, modify nums in-place instead.
*/
function rotate(nums: number[], k: number): void {
let rotate = k % nums.length;
nums.reverse();
nums.splice(0, rotate, ...nums.slice(0,rotate).reverse());
nums.splice(rotate, nums.length - rotate, ...nums.slice(rotate).reverse());
};
- 일단 해결하지 못했다. 좀 더 생각했으면 됐으려나?
- 힌트를 좀 얻어서 배열 함수중 splice, slice, reverse를 이용해 풀 수 있다.
- rotate 값은 k가 배열의 길이를 넘어설 때, 어차피 동일한 패턴이 나오기 때문에 사용해야 한다. 예를 들어, 길이가 7인 배열을 7번 돌리면 원래 주어진 배열이 나온다.
- 해결방법은.
- 주어진 배열을 뒤집는다. (1, 2, 3, 4, 5, 6, 7 -> 7, 6, 5, 4, 3, 2, 1)
- 0번 인덱스부터 k 인덱스 까지의 요소를 다시 뒤집는다. (5, 6, 7, 4, 3, 2, 1)
- k인덱스 부터 마지막 요소까지 뒤집는다. (5, 6, 7, 1, 2, 3, 4)