[LeetCode] 324. Wiggle Sort II (python, java 풀이)

2022. 2. 7. 16:45·Computer Science/자료구조와 알고리즘

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
'Computer Science/자료구조와 알고리즘' 카테고리의 다른 글
  • [누적합] 10986. 나머지의 합 (Python)
  • [LeetCode] 53. maximum subarray (Brute-Force와 카데인 알고리즘) (python 풀이)
  • [프로그래머스\SQL 고득점 kit] String, Date - mysql (1,2번)
  • [프로그래머스\SQL 고득점 kit] JOIN (1~4번 : mysql) LEFT OUTER JOIN 사용
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    오블완
    cmd error
    LNK2001
    mysql error
    해시
    c++error
    leetcode
    티스토리챌린지
    런타임 에러
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[LeetCode] 324. Wiggle Sort II (python, java 풀이)
상단으로

티스토리툴바