
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와 동일한 방식으로 배열형태로 만들어 반환시킬 수 있다.
'연습문제 > 프로그래머스, 기초 트레이닝' 카테고리의 다른 글
| [프로그래머스 기초_java] 무작위로 K개의 수 뽑기 (0) | 2023.11.04 |
|---|---|
| [프로그래머스 기초_java] 배열 만들기 6 (1) | 2023.11.04 |
| [프로그래머스 기초_java] 배열의 원소만큼 추가하기 (1) | 2023.11.04 |
| [프로그래머스 기초_java] 세 개의 구분 (1) | 2023.11.04 |
| [프로그래머스 기초_java] rny_string (1) | 2023.11.03 |