[Leet Code] 1470. 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
댓글남기기