728x90
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181893
접근 방법
인덱스가 헷갈려서 노트에 적어가며 풀었다.
접근 방법 1
매 query 작업마다 배열을 갱신한다.
- 한 작업마다 O(N)의 시간이 소요된다.
- 시간이 오래 걸리고 코드가 복잡해진다.
접근 방법 2
단순하게 매 작업마다 시작점 포인터(start)와 끝점 포인터(end)를 갱신한다.
- 한 작업마다 O(1)의 시간이 소요된다.
- 시간 소요가 적고 코드도 간단하다.
이후 포인터를 이용해 필요한 배열을 추출한다.
접근 방법 2로 진행하였다.
풀이
- 시작 포인터를 start, 끝 포인터를 end 로 선언하고 초기화한다.
- 반복문을 돌린다.
- query의 인덱스(i)가 짝수일 때
- 끝 포인터는 시작 포인터에서 query[i] - 1 만큼 떨어진 곳에 위치하게 된다.
- 각 query[i] 값은 남아있는 arr의 길이 보다 작다고 제한되어 있다.
- query의 인덱스(i)가 홀수일 때
- 시작 포인터는 이전 시작 포인터에서 query[i] 만큼 떨어진 곳에 위치하게 된다.
- 각 query[i] 값은 0보다 크거나 같다고 제한되어 있다.
- query의 인덱스(i)가 짝수일 때
- Arrays.copyOfRange() 를 사용해 배열을 복사한다.
코드
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] query) {
int start = 0;
int end = arr.length - 1;
for (int i = 0; i < query.length; i++) {
if (i % 2 == 0) {
end = start + query[i] - 1;
} else {
start += query[i];
}
}
if (start > end) {
return new int[]{-1};
}
return Arrays.copyOfRange(arr, start, end + 1);
}
}
728x90
728x90
'Algorithm Practice > Programmers' 카테고리의 다른 글
[JAVA/자바][프로그래머스 12946] 하노이의 탑 (0) | 2023.04.19 |
---|---|
[JAVA/자바][프로그래머스 160585] 혼자서 하는 틱택토 (0) | 2023.02.24 |