N

(Leet Code JS)Shuffle An Array 본문

Leet Code 알고리즘

(Leet Code JS)Shuffle An Array

naeunchan 2022. 3. 2. 11:20
728x90
반응형

https://leetcode.com/problems/shuffle-an-array/

 

Shuffle an 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

피셔-예이츠 셔플을 이용해 배열을 섞을 수 있다.

 

Solution이라는 class를 이용해 reset()과 shuffle()을 구현.

생성자로는 nums 배열을 받고,

original 배열을 통해 reset 시 현재 배열을 원래 배열로 되돌린다.

 

현재 배열의 상태는 nums라는 배열로 선언했다.

 

reset() 함수는 단순히 this.nums = [...this.original]로 하여 deep copy를 하여 원래 배열 상태로 되돌린다.

 

shuffle() 함수는 무작위로 배열을 섞으면 된다.

무작위로 섞는 방법은 피셔-예이츠를 활용.

Math.random과 함께 이용하면 된다.

class Solution{
    constructor(nums){
        this.original = [...nums];
        this.nums = nums;
    }
    
    reset() {
        this.nums = [...this.original];

        return this.nums;
    }
    
    shuffle() {
        for(let i = this.nums.length - 1; i > 0; i--){
            const random = Math.floor(Math.random() * (i + 1));
            
            [this.nums[i], this.nums[random]] = [this.nums[random], this.nums[i]];
        }

        return this.nums;
    }
};
728x90
반응형

'Leet Code 알고리즘' 카테고리의 다른 글

(Leet Code JS)Max Area of Island  (0) 2022.03.07
(Leet Code JS)Flood Fill  (0) 2022.03.07
(Leet Code JS) Populating Next Right Pointers in Each Node  (0) 2022.03.02
(Leet Code JS)Triangle  (0) 2022.03.01
(Leet Code JS)DI String Match  (0) 2022.02.28