배열 조각하기(프로그래머스) 본인 코드 리뷰

민코·2023년 10월 27일

문제

기존 코드

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(int[] arr, int[] query) {
        List<Integer> lt = Arrays.stream(arr)
            .boxed()
            .collect(Collectors.toList());

        for(int i = 0; i < query.length; i++){
            if(i % 2 == 0 && query[i] + 1 < lt.size()){
                for(int j = query[i] + 1; j < lt.size(); j++){
                        lt.remove(j);
                        j--;
                }
            }else if(i % 2 == 1 && query[i] < lt.size()){
                for(int k = 0; k < query[i]; k++){
                        lt.remove(0);
                    }
                }
            }

        int[] answer = new int[lt.size()];
        for(int i = 0; i < lt.size(); i++){
            answer[i] = lt.get(i);
        }

        return answer;
    }
}

코드리뷰

주석이 없어 무슨말인 코드인지 눈에 바로 안 들어온다
arr 배열을 stream을 사용해 연속적인 시퀀스 데이터 구조로 만들었고
boxed()를 사용해 int를 Integer 객체로 변환하였다
.collect(Collectors.toList()): 마지막으로,
스트림의 요소들을 List<Integer> 형태로 수집(collect) 및 추가.

이것으로 lt 변수에는 arr 배열의 모든 요소가 포함된 List 생성

query[i] + 1 < lt.size()) 이 조건문은 이미 문제에서
query의 각 원소는 0보다 크거나 같고 남아있는 arr의 길이 보다 작습니다.
라고 적혀있기 때문에 없어도 된다.
제거할 때 인덱스를 맞춰줄려고 j-- 했는데 for문에 증감문(j++) 없애면 j-- 필요 없다.

개선한 코드

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(int[] arr, int[] query) {
        //arr 배열 List<Integer>형태로 만들기
        List<Integer> lt = Arrays.stream(arr)
            .boxed()
            .collect(Collectors.toList());
		//query[]배열 값 반복
        for(int i = 0; i < query.length; i++){
           //0 및 짝수 index, query[i]값 뒷부분 index 제거
            if(i % 2 == 0){ 
                for(int j = query[i] + 1; j < lt.size();){
                        lt.remove(j);
                }
            }//홀수 index,query[i]값 앞부분 index 제거 
  		 	 else if(i % 2 == 1){ 
                for(int k = 0; k < query[i]; k++){
                        lt.remove(0);
                    }
                }
            }
		//제거하고 남은 값
        int[] answer = new int[lt.size()];
        for(int i = 0; i < lt.size(); i++){
            answer[i] = lt.get(i);
        }
	
        return answer;
    }
}
                         
profile
🎮 studyplay.kr 운영 중

0개의 댓글