오랜만입니다.
릿코드에 있는 Algorithm1 플랜은 이틀만에 때려치웠습니다.
왜냐면 귀찮기 때문에
그래도 틈틈이 심심할 때마다 한 두 문제씩 풀긴 했었습니다. 정리를 안해서 그렇지
그래서 오랜만에 한 문제 풀고 끄적여 보려 합니다. Easy 문제로다가 ㅎ
오늘 푼 문제는 이 문제입니다.
릿코드에서 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 인덱스가 만날 때까지 수행해주면 짝수는 왼쪽, 홀수는 오른쪽 이렇게 이쁘게 정렬이 됩니다.
감사합니다~~
'Algorithm > LeetCode' 카테고리의 다른 글
[배열/시뮬레이션] 59. Spiral Matrix II (0) | 2023.05.10 |
---|---|
[배열/시뮬레이션] 54. Spiral Matrix (0) | 2023.05.10 |
[DP] 64. Minimum Path Sum - Java (0) | 2023.03.27 |
[투 포인터] Day 2. Two Pointers (0) | 2021.11.26 |
[이분 탐색] Day 1. Binary Search (0) | 2021.11.17 |