1. JAVA 풀이
class Solution {
public void wiggleSort(int[] nums) {
Arrays.sort(nums);
int[] answer = new int[nums.length];
int len = nums.length;
if (nums.length %2 != 0)
len = nums.length+1;
for(int i=0;i< len/2; i++){
answer[i*2] = nums[len/2-i-1];
}
for(int i=0; i< nums.length/2; i++){
answer[i*2+1] = nums[nums.length-i-1];
}
for(int i=0;i<nums.length; i++){
nums[i] = answer[i];
}
}
}
Java는 새로운 배열을 만들어 풀면 어렵지 않게 풀 수 있었다
nums를 정렬한 다음 짝수, 홀수 index에 역순으로 대입해주면 된다!
2. python 풀이
class Solution:
def wiggleSort(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
nums.sort()
half = len(nums)//2 if len(nums)%2==0 else len(nums)//2+1
nums[::2],nums[1::2] = nums[:half][::-1],nums[half:][::-1]
pop()을 사용하면서 풀고 싶었지만,, 아무리 생각해도 비효율적인 것 같아서 이것저것 시도해보다가,, 결국 다른사람 풀이와 동일한 풀이가.. 독창적인 풀이를 하고 싶었지만.. 실패
# nums = [3,2,6,4,5,1,0] 라 가정할때
1. 오름차순 정렬
# nums = [0,1,2,3,4,5,6]
2. half는 "nums길이의 반 값"인데, 홀수일 경우는 1을 더하도록 설정한다.
** "/"가 아닌 "//"를 써야함 -> "/"의 경우 홀수 일 경우, 소수점이 생기므로 다음 코드를 실행할 때 문제 발생
# len(nums)의 값은 7이므로 half의 값은 4가 된다
3. 짝수자리에 0~(half-1) index까지의 값을 역순으로 차례로 대입(변경), 홀수 자리에 half~끝 index까지의 값을 역순으로 차례로 대입(변경)
** 따로 코드를 분리해서 작성하면, 짝수 먼저 실행, 홀수 이후 실행으로 되므로 원하는 결과값이 나오지 않는다!
따라서 "동시 실행"이 가능하도록 코드 작성
참고로, 짝수의 경우를 예로 들면,,
nums[::2]= nums[:half][::-1]
참고로 [::2]는 2칸씩 띄어 읽는다는 의미! 따라서, nums[::2] 는 [0,2,4,6]
nums[:half] 는 처음부터 (half-1)index까지의 값을 뜻하고
[::-1]은 그 값을 역순 처리한다는 뜻이다
그림으로 해당 풀이를 보면,,
'Computer Science > 자료구조와 알고리즘' 카테고리의 다른 글
[누적합] 10986. 나머지의 합 (Python) (0) | 2024.02.19 |
---|---|
[LeetCode] 53. maximum subarray (Brute-Force와 카데인 알고리즘) (python 풀이) (0) | 2022.02.11 |
[프로그래머스\SQL 고득점 kit] String, Date - mysql (1,2번) (0) | 2021.12.24 |
[프로그래머스\SQL 고득점 kit] JOIN (1~4번 : mysql) LEFT OUTER JOIN 사용 (0) | 2021.12.22 |
[프로그래머스\SQL 고득점 kit] ISNULL (1~3번: Mysql) (3번: Oracle) (0) | 2021.12.20 |