1. 문제
- nums 배열에서 입력받은 k 만큼 요소들 오른쪽으로 이동시키기
2. 시도
첫 번째
리스트를 새로 생성하고 추가/삭제하는 로직이 중간에 있어 속도 부분에서 효율이 좋지 않을 수 있다. 별 다른 방법이 생각나지 않아 우선 코드가 잘 작동하는지 테스트를 해보았음
class Solution {
public void rotate(int[] nums, int k) {
int end = nums.length-1;
List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
List<Integer> kLists = new ArrayList<>();
System.out.println("list = " + list);
for (int i=0; i<k; i++) {
kLists.add(list.get(end-i));
list.remove(end-i);
}
System.out.println("result1 = " + list);
System.out.println("result2 = " + kLists);
for (int i=0; i< kLists.size(); i++) {
list.add(0,kLists.get(i));
}
System.out.println("result3 = " + list);
for (int i=0; i<nums.length; i++) {
nums[i] = list.get(i);
}
}
}
테스트코드 일부 성공으로 방향성은 맞아 보이지만 k가 배열 길이보다 클 떄를 고려해야할 것 같다.
두 번째
k를 배열 길이로 나눈 나머지 값으로 설정해 보았다.
class Solution {
public void rotate(int[] nums, int k) {
k = k % nums.length;
int end = nums.length-1;
List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
List<Integer> kLists = new ArrayList<>();
System.out.println("list = " + list);
for (int i=0; i<k; i++) {
kLists.add(list.get(end-i));
list.remove(end-i);
}
System.out.println("result1 = " + list);
System.out.println("result2 = " + kLists);
for (int i=0; i< kLists.size(); i++) {
list.add(0,kLists.get(i));
}
System.out.println("result3 = " + list);
for (int i=0; i<nums.length; i++) {
nums[i] = list.get(i);
}
}
}
예상대로 시간은 더 걸린듯하지만 코드는 성공이다. 추후 개선 사항으로는 리스트 개수를 줄이거나 시간이 더 걸릴 수 있는 add, remove를 사용하지 않는 방향을 생각해 봐야겠다.
'자바 알고리즘' 카테고리의 다른 글
[leetcode - Java] 125. Valid Palindrome (0) | 2023.08.26 |
---|---|
[leetcode - Java] 121. Best Time to Buy and Sell Stock (0) | 2023.08.25 |
[leetcode - Java] 169. Majority Element (0) | 2023.08.24 |
[leetcode - Java] 80. Remove Duplicates from Sorted Array II (0) | 2023.08.24 |
[leetcode - Java] 26. Remove Duplicates from Sorted Array (0) | 2023.08.24 |