본문 바로가기

코딩테스트

프로그래머스 코딩테스트 빈 배열에 추가, 삭제하기 JAVA

빈 배열에 추가, 삭제하기 JAVA

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/181860

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명 : 아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.

 

import java.util.*;
    
class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        List<Integer> temp = new ArrayList<>();
        
        for(int i=0; i<flag.length; i++){
            if(flag[i]) {
                for(int j=0; j<arr[i]*2; j++){
                  temp.add(arr[i]); 
                  //System.out.println("true : "+i+" "+arr[i]);
                }
            }else{
                int repeatLength = temp.size()-arr[i];
                for(int j=temp.size()-1; j>=repeatLength; j--){
                  //System.out.println("j : "+j);
                  temp.remove(j);
                }
            }
        }
        
        int[] answer = new int[temp.size()];
        for(int i=0; i<temp.size(); i++){
            answer[i] = temp.get(i);
        }
        
        return answer;
    }
}

 

else 안에 해당하는, remove하는 for문을 돌릴 떄 헷갈렸었다.

 

for문에서 repeatLength 변수를 만들어서 사용한 이유는,

for문에서 temp의 사이즈가 remove 되면서 temp.size() 즉, 길이가 변경이 되므로 repeatLength 변수를 사용 하지 않고, temp.size()-arr[i] 를 그대로 사용하게 되면 temp.size()의 값이 계속 변경이 되면서 에러가 난다!!

 

아우참~!

 

빈배열에 추가삭제하기 테스트 통과!

728x90
300x250