[ Programmers ] 배열 만들기 6 ( java ) 94 / 124
📚 Table of Contents
문제 설명
0과 1로만 이루어진 정수 배열 arr
가 주어집니다. arr
를 이용해 새로운 배열 stk
을 만드려고 합니다.
i
의 초기값을 0으로 설정하고 i
가 arr
의 길이보다 작으면 다음을 반복합니다.
- 만약
stk
이 빈 배열이라면arr[i]
를stk
에 추가하고i
에 1을 더합니다. stk
에 원소가 있고,stk
의 마지막 원소가arr[i]
와 같으면stk
의 마지막 원소를stk
에서 제거하고i
에 1을 더합니다.stk
에 원소가 있는데stk
의 마지막 원소가arr[i]
와 다르면stk
의 맨 마지막에arr[i]
를 추가하고i
에 1을 더합니다.
위 작업을 마친 후 만들어진 stk
을 return 하는 solution 함수를 완성해 주세요.
단, 만약 빈 배열을 return 해야한다면 [-1]을 return 합니다.
제한사항
- 1 ≤
arr
의 길이 ≤ 1,000,000arr
의 원소는 0 또는 1 입니다.
입출력 예
arr | result |
---|---|
[0, 1, 1, 1, 0] | [0, 1, 0] |
[0, 1, 0, 1, 0] | [0, 1, 0, 1, 0] |
[0, 1, 1, 0] | [-1] |
입출력 예 설명
입출력 예 #1
- 각 작업을 마친 후에 배열의 변화를 나타내면 다음 표와 같습니다.
idx | arr[idx] | stk |
---|---|---|
0 | 0 | [] |
1 | 1 | [0] |
2 | 1 | [0, 1] |
3 | 1 | [0] |
4 | 0 | [0, 1] |
5 | - | [0, 1, 0] |
따라서 [0, 1, 0]을 return 합니다.
입출력 예 #2
- 각 작업을 마친 후에 배열의 변화를 나타내면 다음 표와 같습니다.
idx | arr[idx] | stk |
---|---|---|
0 | 0 | [] |
1 | 1 | [0] |
2 | 0 | [0, 1] |
3 | 1 | [0, 1, 0] |
4 | 0 | [0, 1, 0, 1] |
5 | - | [0, 1, 0, 1, 0] |
따라서 [0, 1, 0, 1, 0]을 return 합니다.
입출력 예 #3
- 각 작업을 마친 후에 배열의 변화를 나타내면 다음 표와 같습니다.
idx | arr[idx] | stk |
---|---|---|
0 | 0 | [] |
1 | 1 | [0] |
2 | 1 | [0, 1] |
3 | 0 | [0] |
4 | - | [] |
마지막에 빈 배열이 되었으므로 [-1]을 return 합니다.
문제 풀이
코드 설명
- 코드의 목적:
- 주어진 정수 배열(arr)을 입력으로 받아, 각 원소를 스택에 넣습니다. 만약 스택의 top 원소와 현재 원소가 같다면, top 원소를 스택에서 제거합니다. 그렇지 않은 경우 현재 원소를 스택에 넣습니다. 모든 원소에 대한 처리가 끝나면 스택의 원소들을 정수 배열로 변환하여 반환합니다. 스택이 비어있는 경우에는 -1만을 원소로 가진 배열을 반환합니다.
- 코드의 주요 구조:
- Solution 클래스와 solution 메소드로 구성
- solution 메소드에서는 Stack을 사용하여 정수들을 저장하고, 이를 스트림 API를 이용해 정수 배열로 변환합니다.
- 코드의 주요 알고리즘:
- Stack과 for-each loop를 사용하여 주어진 배열의 각 원소를 처리합니다.
- 스택의 top 원소와 현재 원소가 같다면 top 원소를 제거하고, 그렇지 않다면 현재 원소를 스택에 추가합니다.
- 스트림 API의 mapToInt와 toArray 메소드를 사용하여 스택을 정수 배열로 변환합니다.
- 코드의 핵심:
- 주어진 배열의 각 원소를 처리하여 스택에 넣거나 제거하는 것
- Stack과 스트림 API를 효율적으로 사용하여 배열 처리를 수행하는 것
풀이
import java.util.Stack;
class Solution {
// solution 메소드 정의, 주어진 정수 배열을 매개변수로 받음
public int[] solution(int[] arr) {
// 정수를 저장할 Stack을 생성
Stack<Integer> stk = new Stack<>();
// 주어진 배열의 각 원소를 처리
for (int n : arr) {
if (stk.isEmpty()) {
stk.push(n);
} else if (stk.peek() == n) {
stk.pop();
} else {
stk.push(n);
}
}
// 스택을 정수 배열로 변환하여 반환, 스택이 비어있으면 -1만을 원소로 가진 배열을 반환
return stk.isEmpty() ? new int[]{-1} : stk.stream().mapToInt(Integer::intValue).toArray();
}
}
'Coding > Programers' 카테고리의 다른 글
[ Programmers ] 배열의 길이를 2의 거듭제곱으로 만들기 ( java ) 96 / 124 (0) | 2024.01.20 |
---|---|
[ Programmers ] 무작위로 K개의 수 뽑기 ( java ) 95 / 124 (0) | 2024.01.14 |
[ Programmers ] 빈 배열에 추가, 삭제하기 ( java ) 93 / 124 (1) | 2024.01.09 |
[ Programmers ] 배열의 원소만큼 추가하기 ( java ) 92 / 124 (0) | 2024.01.08 |
[ Programmers ] 세 개의 구분자 ( java ) 91 / 124 (1) | 2024.01.08 |