개요
nums 배열과 k 값이 주어진다.
nums를 오른쪽으로 k번만큼 rotate 시켰을때의 nums 배열을 구하는 문제이다.
Rotate Array - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
풀이
우선 k가 nums 배열보다 크다면 다시 원 상태로 돌아오는 경우를 계산해서 굳이 k만큼 돌릴 필요없어진다.
그 경우를 계산해서 단순하게 unshift와 pop으로 구현했는데 당연히 시간초과가 나오게 되었다
계속 고민하다가 잘 구현이 안되서 힌트를 좀 살펴봤다. 아예 배열을 새로 만들어서 해당 위치에 올 값을 계산하여 넣어주는 방식으로 구현을 했다.
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*
* 리턴하지 말것
*
* nums 배열을 k만큼 회전시킨다
*
* 단순 while문을 사용했을 떄는 시간초과가 뜬다
*
* 원형큐? 배열의 시작지점과 끝 지점만 바꿔준다
*/
var rotate = function (nums, k) {
// let bit = 0;
// k = k % nums.length;
// let count = 0;
// while (count < k) {
// nums.unshift(nums.pop());
// count += 1;
// }
const temp = [...nums]; // 새로운 배열을 만들어서
// 굳이 k번만큼 돌릴 필요 없이 k번 돌렸을 때 위치를 계산하면 된다.
// 이때 k가 nums배열보다 큰 경우 다시 원상태로 돌아올 경우가 있으니
// k의 나눈 나머지를 계산해서 위치를 계산한다
for (let i = 0; i < nums.length; i++) {
const index = (i + k) % nums.length;
nums[index] = temp[i];
}
};
'알고리즘' 카테고리의 다른 글
[알고리즘] LeetCode Balanced Binary Tree JS (0) | 2022.12.02 |
---|---|
[알고리즘] LeetCode Lowest Common Ancestor of a Binary Search Tree JS (1) | 2022.12.01 |
[알고리즘] LeetCode 3. Longest Substring Without Repeating Characters JS (0) | 2022.11.24 |
[알고리즘] LeetCode Top K Frequent Words JS (0) | 2022.11.24 |
[알고리즘] LeetCode Decode String JS (0) | 2022.11.23 |