Leetcode Java Minimum Swaps To Make Sequences Increasing
업데이트:
문제
코드
class Solution {
public int minSwap(int[] nums1, int[] nums2) {
int swap = 1;
int fix = 0;
for (int idx = 1; idx < nums1.length; idx++) {
if (nums1[idx - 1] >= nums2[idx] || nums2[idx - 1] >= nums1[idx]) {
swap++;
} else if (nums1[idx - 1] >= nums1[idx] || nums2[idx - 1] >= nums2[idx]) {
int temp = swap;
swap = fix + 1;
fix = temp;
} else {
int min = Math.min(swap, fix);
swap = min + 1;
fix = min;
}
}
return Math.min(swap, fix);
}
}
결과
설명
-
num1과 num2의 값들이 점층적으로 증가하는 값의 배열로 만들기 위해서 같은 위치의 값을 바꾸는 최소 횟수를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- swap은 nums1과 nums2의 동일 위치 값을 바꾸기 위한 최소 횟수를 저장할 변수로, 현 위치의 최소 변경 횟수인 1로 초기화한다.
- fix는 nums1과 nums2의 동일 위치 값을 바꾸지 않는 최소 횟수를 저장할 변수로, 현 위치의 최소 고정 횟수인 0으로 초기화한다.
- 1부터 nums1의 길이 미만까지 idx를 증가시키며 아래를 수행한다.
- 아래의 경우 중 하나라도 만족하면 두 배열 내 idx번째 값을 바꾸어 swap을 증가시킨다.
- nums1의 $idx - 1$번째 값이 nums2의 idx번째 값보다 크거나 같은 경우.
- nums2의 $idx - 1$번째 값이 nums1의 idx번째 값보다 크거나 같은 경우.
- 위의 경우가 아니면서 아래의 경우 중 하나라도 만족하면 temp에 swap 값을 임시 저장 후 swap에 fix보다 1 큰 값을 넣고, fix에 temp를 넣어준다.
- nums1 혹은 nums2의 idx번째 값이 이전 값보다 크거나 같은 경우.
- 위의 두 경우가 아니라면 변경하거나 변경하지 않아도 되므로, min에 swap과 fix 중 작은 값을 임시 저장 후 swap에 $min + 1$을 fix에 min을 넣어준다.
- 아래의 경우 중 하나라도 만족하면 두 배열 내 idx번째 값을 바꾸어 swap을 증가시킨다.
- 반복이 완료되면 swap과 fix 중 작은 값을 넣어준다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기