[알고리즘문제풀기] 빈 배열에 추가, 삭제하기

silver's avatar
Apr 12, 2025
[알고리즘문제풀기] 빈 배열에 추가, 삭제하기

문제

내가 작성한 정답

ArrayList

import java.util.*; class Solution { public int[] solution(int[] arr, boolean[] flag) { ArrayList<Integer> answer = new ArrayList<>(); for(int i =0; i<arr.length; i++){ if(flag[i]){ for(int j=0; j<arr[i]*2; j++){ answer.add(arr[i]); } } else { for(int k=0; k<arr[i]; k++){ if(!answer.isEmpty()) answer.remove(answer.size()-1); } } } return answer.stream().mapToInt(i->i).toArray(); } }

StringBuilder

import java.util.*; class Solution { public int[] solution(int[] arr, boolean[] flag) { StringBuilder sb = new StringBuilder(); for(int i =0; i<arr.length; i++){ if(flag[i]){ for(int j=0; j<arr[i]*2; j++){ sb.append(arr[i]); } } else { for(int j=0; j<arr[i]; j++) sb.deleteCharAt(sb.length()-1); } } return Arrays.stream(sb.toString().split("")) .mapToInt(i-> Integer.parseInt(i)).toArray(); } }

Stack(LIFO)

import java.util.*; class Solution { public int[] solution(int[] arr, boolean[] flag) { Stack<Integer> st = new Stack<>(); for(int i =0; i<arr.length; i++){ if(flag[i]){ for(int j=0; j<arr[i]*2; j++){ st.push(arr[i]); } } else { for(int j=0; j<arr[i]; j++){ st.pop(); } } } // int[] answer = new int[st.size()]; // 1. pop 이용 -> 뒤에서부터 팝! // for(int i = st.size()-1; i>=0; i--){ // answer[i] = st.pop(); // } // 2. get 이용 -> 순서대로! // for(int i = 0; i<st.size(); i++){ // answer[i] = st.get(i); // } // return answer; // 3. stream 이용 return st.stream().mapToInt(i->i).toArray(); } }

다른 사람들의 정답

String

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(); } }
Share article

silver