Solution 1) 내 풀이
import java.util.Arrays;
import java.util.Stack;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        Stack<Integer> stack = new Stack<>();
        
        for (int i = 0; i < flag.length; i++) {
            if (flag[i]) {
                for (int j = 0; j < arr[i] * 2; j++) {
                    stack.push(arr[i]);
                }
            } else {
                for (int j = 0; j < arr[i]; j++) {
                    stack.pop();
                }
            }
        } return stack.stream().mapToInt(Integer::intValue).toArray();
    }
}

 

코드 및 문제 리뷰

 

int 배열과 boolean 배열이 주어진다. boolean 배열의 i 번쨰 요소가 true 라면 int 배열의 i 번째 요소의 두배 만큼 새로운 배열 X에 뒤에서 부터 추가해준다. boolean 배열의 i 번째 요소가 false 라면 int 배열의 i 번째 요소 만큼 배열 X에서 뒤에서 부터 뺴준 뒤 X에 들어가 있는 int 배열을 반환하는 문제이다.

 

후입선출(Last-in-Fist-out, LIFO)의 방식을 유도하는 걸로 보아 stack으로 풀어봤다.

  • Stack 생성
    • Stack<Integer> stack = new Stack<>();
  • 반복문으로 boolean 형식의 flag 배열 돌리기
    • for (int i = 0; i < flag.length; i++) {
  • flag의 요소가 true 라면?
    • if (flag[i]) {
  • arr 요소의 수치의 2배 만큼 뒤에서 부터 새로 추가 해준다.
    • for (int j = 0; j < arr[i] * 2; j++) { stack.push(arr[i]);}
  • flag의 요소가 false 라면?
  • arr 요소의 수치만큼 뒤에서 부터 빼준다.
    • for (int j = 0; j < arr[i]; j++) {stack.pop();}
  • Stack 형식을 배열로 반환
    • return stack.stream().mapToInt(Integer::intValue).toArray();

선형자료구조인 Stack은 비교적 손쉽게 구현이 가능하다.

Stack  역시 int 형이었다면 List와 동일한 방식으로 배열형태로 만들어 반환시킬 수 있다.

+ Recent posts