코린이의 소소한 공부노트

[LeetCode/Medium] 384. Shuffle an Array 본문

코딩테스트 풀이/JAVA

[LeetCode/Medium] 384. Shuffle an Array

무지맘 2023. 2. 15. 23:56

목표: 배열의 요소를 랜덤하게 섞는 클래스 구현

- 생성자

reset(), shuffle()

 

1. Input

- 생성자: int[] nums

- reset(): 없음

- shuffle(): 없음

 

2. Output

- reset(): 맨 처음으로 받은 배열

- shuffle(): 배열의 요소를 랜덤하게 섞은 결과

 

3. Constraint

1) 1 <= nums.length <= 50

2) - 10^6 <= nums[i] <= 10^6

3) nums에는 중복 요소가 없다.

4) 최대 10^4번의 메서드 호출이 있다.

5) shuffle()로 만들 수 있는 모든 배열은 나올 확률이 전부 동일해야 한다.

 

4. Example

Solution solution = new Solution([1, 2, 3]); // 처음으로 받은 배열: [1,2,3]
solution.shuffle(); // 맨 아래에 있는 모든 경우의 배열 중 1개를 반환
solution.reset(); // [1,2,3]
solution.shuffle(); // 맨 아래에 있는 모든 경우의 배열 중 1개를 반환

// 모든 경우의 수
[1,2,3]  [1,3,2]  [2,1,3]  [2,3,1]  [3,1,2]  [3,2,1]

 

5. Code

1) 첫 코드(2023/02/15)

class Solution {
    int[] deck;
 
    public Solution(int[] nums) {
        deck = nums;
    }

    public int[] reset() {
        return deck;
    }

    public int[] shuffle() {
        int[] answer = Arrays.copyOf(deck, deck.length);
        for(int i=0 ; i<answer.length ; i++){
            int x = (int)(Math.random()*answer.length), tmp = answer[x];
            answer[x] = answer[i];
            answer[i] = tmp;
        }
        return answer;
    }
}