문제 풀이 사전 과정
- 짝수 인덱스일 때에는
- 배열 arr의 query[i]의 인덱스 뒷부분을 잘라서 버림.
- 홀수 인덱스일 때에는
- 배열 arr의 query[i]의 인덱스 앞부분을 잘라서 버림.
문제 풀이 세부 과정
- 주어진 Array를 List로 변환한다.
- arr을 for문 돌면서 index가 짝수/홀수인지 분기한다.
- 짝수/홀수일 때에 뒷부분/앞부분을 잘라서 버리기 때문에 List.subList를 사용한다.
주의 사항
- java에서 subList할 때 인자값(parameter)에 대한 결과를 체크해본다.
- 두번째 파라미터(잘라내는 마지막 값)에다가 values.size()-1했다가 삽질함.
- 테스트 실행 시에는 모두 성공해서 금방 끝났었는데, 제출하면 일부 문제가 계속 런타임 실패로 나와서 삽질함.
- query값 중 일부 데이터가 인덱스를 벗어나는 값이 있는 것으로 예상되어 보정 조건 추가
package programmers.level0;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 힌트,
* - for문을 지속해갈 수록 초기에 지정했던 원소의 위치가 달라지게 되면서 생기는 문제
* - 문제가 인덱가 홀수/짝수 일때를 의미한듯.
* - 쿼리 값이 홀수/짝수라 생각함.
*/
public class ArraySubList {
public static void main(String[] args){
//System.out.println(0%2 == 0);
List<Integer> values = Arrays.asList(1, 2, 3, 4 ,5);
System.out.println(values.subList(3, values.size()));
//Solution solution = new Solution();
//System.out.println(Arrays.toString(solution.solution(new int[]{0, 1, 2, 3, 4, 5, 6, 7}, new int[]{4, 1, 2})));
}
}
class Solution {
public int[] solution(int[] arr, int[] query) {
List<Integer> values = Arrays.stream(arr).boxed().collect(Collectors.toList());
for(int i=0; i<query.length; i++){
int queryValue = query[i];
if(values.size() == 0){
break;
}
if(values.size() < queryValue){
continue;
}
System.out.println("[before] query:"+queryValue + ", values: "+values);
if(isEven(i)){
values = values.subList(0, queryValue + 1);//짝수면, 뒷부분을 잘라서 버림
}else{
values = values.subList(queryValue, values.size());//홀수면, 앞부분을 잘라서 버림
}
System.out.println("[after] query:"+queryValue + ", values: "+values);
}
System.out.println("result: " + values);
return values.stream().mapToInt(Integer::intValue).toArray();
}
private boolean isEven(int value){
return (value % 2) == 0 ? true : false;
}
}
출처: 프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/181893?language=java
'lecture.js > algorithm.log' 카테고리의 다른 글
#017 퀵 정렬 (0) | 2017.07.18 |
---|---|
#015 힙 정렬 (0) | 2017.07.18 |
#014 삽입 정렬 (0) | 2017.07.18 |
#013 선택 정렬 (0) | 2017.07.18 |
#012 버블 정렬 (0) | 2017.07.18 |