728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다.
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://leetcode.com/problems/merge-sorted-array/
문제 설명
2개의 배열과, 배열 내 병합할 원소의 개수를 의미하는 m, n이 주어집니다.
각각의 배열의 m, n 번지까지의 배열을 병합하여 정렬된 배열을 반환하세요.
이때 새로운 배열을 return 하는게 아닌 첫 번째 배열에 값을 담으세요.
풀이 방법
1. 기준이 되는 첫 번째 배열(nums1)의 m개 까지는 무조건 고정
2. m번째 인덱스부터 nums2 배열의 값을 담음
3. Arrays.sort()를 이용하여 정렬
내 코드(JAVA)
public void merge(int[] nums1, int m, int[] nums2, int n) {
int index=0;
// m 인덱스 부터 nums2의 값을 순서대로 넣어준 뒤 정렬
for(int i=m; i<nums1.length; i++) {
nums1[i] = nums2[index++];
}
Arrays.sort(nums1);
}
다른 사람 코드
public void merge(int[] nums1, int m, int[] nums2, int n) {
int tail1 = m - 1, tail2 = n - 1, finished = m + n - 1;
while (tail1 >= 0 && tail2 >= 0) {
nums1[finished--] = (nums1[tail1] > nums2[tail2]) ?
nums1[tail1--] : nums2[tail2--];
}
while (tail2 >= 0) { //only need to combine with remaining nums2
nums1[finished--] = nums2[tail2--];
}
}
정렬 메서드를 사용하지도, 정렬을 직접 구현하지도 않고 푼 방법
각 배열의 꼬리 즉, 끝 값을 포인터로 지정하여 더 큰 값을 찾아 반환해야 할 배열의 꼬리부터 채워 넣는 방식
값이 존재하는 범위까지만 변수로 담은 방법이 좋은 것 같다.
메서드에 너무 익숙해져 있는 것 같다. 메서드를 잘 활용해서 풀이를 해도 좋지만 이러한 방법으로 풀어보는 것도 도전해야겠다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[LeetCode/JAVA] 1877. Minimize Maximum Pair Sum in Array (0) | 2021.07.28 |
---|---|
[프로그래머스/JAVA] 폰켓몬 (0) | 2021.07.27 |
[LeetCode/JAVA] 561. Array Partition I (0) | 2021.07.25 |
[LeetCode/JAVA] 21. Merge Two Sorted Lists (0) | 2021.07.24 |
[프로그래머스/JAVA] 네트워크 (0) | 2021.07.24 |
댓글