본문 바로가기

Algorithm/LeetCode

[투 포인터] 905. Sort Array By Parity - Java

오랜만입니다.

릿코드에 있는 Algorithm1 플랜은 이틀만에 때려치웠습니다.

왜냐면 귀찮기 때문에

 

그래도 틈틈이 심심할 때마다 한 두 문제씩 풀긴 했었습니다. 정리를 안해서 그렇지

그래서 오랜만에 한 문제 풀고 끄적여 보려 합니다. Easy 문제로다가 ㅎ

 

문제 바로가기

 

Sort Array By Parity - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

오늘 푼 문제는 이 문제입니다.

릿코드에서 Problems 들어가면 오른쪽에 달력이 있는데, 맨날 한 문제씩 나옵니다.

월말로 갈수록 난이도가 올라가서 매달 초에만 풉니다. ^^

 

주어진 배열에서 짝수를 왼쪽으로 모는 문제입니다. 딱 봐도 투 포인터를 써서 푸는 문제라는 게 감이 옵니다.

사실 안 왔습니다. N 타입 두 번 돌 뻔~ 근데 배열의 최대 길이가 5000이라서 이렇게 해도 통과는 할 것 같습니다.

 

class Solution {
  public int[] sortArrayByParity(int[] nums) {
    int left = 0;
    int right = nums.length - 1;
    
    while (left < right) {
      if (nums[left] % 2 == 0) {
        left++;
        continue;
      }
      if (nums[right] % 2 == 0) {
        swap(nums, left, right);
      }
      
      right--;
    }
    
    return nums;
  }
  
  public void swap(int[] nums, int left, int right) {
    int temp = nums[left];
    nums[left] = nums[right];
    nums[right] = temp;
  }
}

 

 

왼쪽에서는 짝수인 친구가 나오면 left를 1씩 증가시켜 줍니다. 걔는 그대로 놔두면 되니깐요.

그리고 오른쪽에서는 짝수인 친구가 나오면 left에 있는 친구와 바꿔줍니다. 이때 nums[left]는 항상 홀수가 됩니다. 짝수면 가만 안놔두니깐

마지막으로 right 인덱스는 항상 1씩 감소시켜 줍니다. 1) nums[right] 가 짝수라면 바꿔줬으니까 줄이고, 홀수라면 거기 놔두면 되니깐 감소시켜주는 겁니다.

 

이런 로직을 left 인덱스와 right 인덱스가 만날 때까지 수행해주면 짝수는 왼쪽, 홀수는 오른쪽 이렇게 이쁘게 정렬이 됩니다.

 

 

감사합니다~~