문제 원본: https://leetcode.com/problems/shuffle-the-array/

문제

[x1,x2,...,xn,y1,y2,...,yn] 형식의 2n개의 요소로 이루어진 nums 배열이 주어진다.
[x1,y1,x2,y2,...,xn,yn] 형식의 배열로 반환하라.

Example 1:

Input: nums = [2,5,1,3,4,7], n = 3
Output: [2,3,5,4,1,7] 
Explanation: Since x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 then the answer is [2,3,5,4,1,7].

Example 2:

Input: nums = [1,2,3,4,4,3,2,1], n = 4
Output: [1,4,2,3,3,2,4,1]

Example 3:

Input: nums = [1,1,2,2], n = 2
Output: [1,2,1,2]

Constraints:

  • 1 <= n <= 500
  • nums.length == 2n
  • 1 <= nums[i] <= 10^3

접근 방법

반복문 하나를 0 ~ n까지만 돌리는 걸 생각했다. 셔플이 끝난 배열, 즉 반환할 배열의 이름을 shuffle이라고 했을 때, shuffle[i]에 값을 할당하는 방법은 파이썬과 자바/C#으로 나눠서 생각했다.

Python

파이썬에는 list 자료형의 append() 함수가 있기 때문에, 그 함수를 이용할 것이다. 한 번의 반복에 nums[i]nums[n + i]를 차례차례 넣는 것을 생각했다. 그러면 자연스럽게 shuffle은 문제가 요구하는 형식을 갖출 것이다.

Java, C#

자바와 C#에는 append() 메서드가 없다. 그래서 shuffle의 인덱스 처리를 해줘야 한다. 파이썬처럼 0 <= i < n의 범위에서 한 번의 반복에 nums[i]nums[n + i]를 차례차례 넣는 것을 생각했다.
shuffle에 두 개의 값을 넣고 나면, 그 다음 i는 2가 증가해야 한다. 그러나 nums[i]i는 1씩 증가해야 nums의 그 다음 값을 가져올 수 있다.
따라서 shuffle의 인덱스 처리를 i * 2, i * 2 + 1로 해줘서 i가 1씩 증가하더라도 shuffle은 2씩 증가, nums는 1씩 증가하게 해줬다.

풀이

Java

class Solution {
    public int[] shuffle(int[] nums, int n) {
        int[] shuffle = new int[2 * n];
        
        for (int i = 0; i < n; i++) {
            shuffle[i * 2] = nums[i];
            shuffle[i * 2 + 1] = nums[n + i];
        }
        return shuffle;
    }
}
  • Runtime: 0ms
  • Memory: 42.5MB

C#

public class Solution {
    public int[] Shuffle(int[] nums, int n) {
        int[] shuffle = new int[2 * n];
        
        for (int i = 0; i < n; i++) {
            shuffle[i * 2] = nums[i];
            shuffle[i * 2 + 1] = nums[n + i];
        }
        return shuffle;
    }
}
  • Runtime: 190ms
  • Memory: 42.9MB

Python

class Solution:
    def shuffle(self, nums: List[int], n: int) -> List[int]:
        shuffle = list()
        for i in range(n):
            shuffle.append(nums[i])
            shuffle.append(nums[n + i])
        return shuffle
  • Runtime: 56ms
  • Memory: 14.1MB

댓글남기기