빈 배열에 추가, 삭제하기

nacSeo (낙서)·2024년 2월 27일
0

프로그래머스

목록 보기
107/169

문제 설명

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

제한사항

1 ≤ arr의 길이 = flag의 길이 ≤ 100
arr의 모든 원소는 1 이상 9 이하의 정수입니다.
현재 X의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않습니다.

나의 코드

import java.util.List;
import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        List<Integer> X = new ArrayList<>();
        for(int i=0; i<flag.length; i++) {
            if(flag[i]==true) {
                for(int j=0; j<arr[i]*2; j++) {
                    X.add(arr[i]);
                }
            } else {
                for(int j=0; j<arr[i]; j++) {
                    X.remove(X.size()-1);
                }
            }
        }
        int[] answer = new int[X.size()];
        for(int i=0; i<X.size(); i++) {
            answer[i] = X.get(i);
        }
        return answer;
    }
}

다른 사람 코드

import java.util.stream.Stream;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        String answer = "";

        for(int idx=0; idx<arr.length; idx++) {
            if(flag[idx]) {
                answer += String.valueOf(arr[idx]).repeat(arr[idx]*2);
            }
            else {
                answer = answer.substring(0, answer.length() - arr[idx]);
            }
        }

        return Stream.of(answer.split("")).mapToInt(Integer::parseInt).toArray();
    }
}

List를 사용하지 않고 배열String으로 풀이 (valueOf(), repeat(), substring() 등의 메소드 사용)

느낀 점

문제를 꼼꼼히 읽고 각각의 조건마다 이중반복문을 사용하여 List에 저장 및 삭제 시켜서 해결했다. 확실히 배열의 길이가 고정되다보니 추가,삭제하는 문제는 List를 활용하여 푸는 게 가장 간편한 것 같다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글