문제
내가 작성한 정답
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