[프로그래머스/Java] Lv.0 배열 조각하기

febCho·2024년 3월 9일
0

코딩테스트

목록 보기
60/253
post-thumbnail

문제

정수 배열 arr와 query가 주어집니다.

query를 순회하면서 다음 작업을 반복합니다.

  • 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
  • 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.

위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.

- 제한사항

  • 5 ≤ arr의 길이 ≤ 100,000
  • 0 ≤ arr의 원소 ≤ 100
  • 1 ≤ query의 길이 < min(50, arr의 길이 / 2)
  • query의 각 원소는 0보다 크거나 같고 남아있는 arr의 길이 보다 작습니다.

풀이

- 오답

문제가 너무 이해하기 어렵게 되어 있었다. 마이 화나네~~
처음에 생각했던 건 짝수 인덱스, 홀수 인덱스가 int[] arr의 인덱스라는 거였고, 그래서 이중 for문을 만들었었다. 하지만 테스트를 통과하지 못했고, 한참을 뜯어 보다가 질문하기에 들어가서 알았다. 저 인덱스는 int[] query의 인덱스라는 걸...

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[] query) {
        int[] answer = {};
        
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<query.length;j++){
               if(i%2 == 0){
                   answer = Arrays.copyOfRange(arr, 0, query[j]+1);
                }else{
                   answer = Arrays.copyOfRange(arr, query[i], arr.length);
                } 
            }
        }
        return answer;
    }
}

- 정답

그래서 코드를 아래와 같이 수정했다. 이렇게 쉬울 수가. query의 값에 따라 결과가 계속 누적되어야 하기 때문에 따로 변수를 만들어줄 필요 없이 arr을 재사용했다.

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[] query) {
        for(int i=0;i<query.length;i++) {
            if(i%2 == 0) {
                arr = Arrays.copyOfRange(arr, 0, query[i]+1);
            }else {
                arr = Arrays.copyOfRange(arr, query[i], arr.length);
            }
        }
        return arr;
    }
}
profile
Done is better than perfect.

0개의 댓글