728x90
코드 힌트
- 스택을 활용한 문제 해결:
- 스택을 사용하여 인접한 동일한 요소를 제거합니다. 스택은 후입선출(Last In, First Out) 구조를 갖기 때문에 최근에 추가된 요소를 먼저 처리할 수 있습니다.
- 스택의 비어있음 확인:
- stack.isEmpty()를 사용하여 스택이 비어 있는지를 확인합니다. 스택이 비어 있을 때는 현재 요소를 추가하고 계속 진행합니다.
- 스택의 최상위 요소 확인:
- stack.peek()를 사용하여 스택의 최상위 요소를 확인합니다. 현재 요소와 비교하여 동일한 경우에는 스택에서 제거(stack.pop())합니다.
- 조건에 따른 스택 조작:
- 현재 요소가 스택의 최상위 요소와 동일하면 제거하고, 그렇지 않으면 스택에 추가합니다. 이 작업을 반복하여 인접한 동일한 요소 쌍을 제거합니다.
- 스택 비어있음 처리:
- 모든 요소를 처리한 후 스택이 비어 있으면 결과로 [-1]을 반환합니다. 스택이 비어 있지 않으면, 스택의 요소를 배열로 변환하여 반환합니다.
- 배열로 변환:
- 스택의 요소를 배열로 변환할 때, 스택에서 요소를 하나씩 꺼내서 배열에 저장합니다. 배열은 스택의 최상위 요소부터 차례로 포함됩니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
// 요소를 담을 스택
Stack<Integer> stack = new Stack<>();
// i의 초기값을 0으로 설정하고 i가 arr의 길이보다 작으면 다음을 반복합니다.
for (int i = 0; i < arr.length; i++) {
// 만약 stk이 빈 배열일 때
if (stack.isEmpty()) {
stack.push(arr[i]); // arr[i]를 stk에 추가
continue; // i에 1을 더합니다. (continue로 다시 for문 시작 즉 + 1이 됨)
}
// stk에 원소가 있고, stk의 마지막 원소가 arr[i]와 같을 때
if (stack.peek() == arr[i]) {
stack.pop(); // stk의 마지막 원소를 stk에서 제거
continue; // i에 1을 더합니다.
}
// stk에 원소가 있는데 stk의 마지막 원소가 arr[i]와 다르면 stk의 맨 마지막에 arr[i]를 추가하고 i에 1을 더합니다.
// 위 if조건을 전부 지났을 때 자동으로 충족되기 때문에 조건문 사용할 필요 없음
stack.push(arr[i]);
}
// 마지막에 빈 배열이 되었으므로 [-1]을 return 합니다.
if (stack.isEmpty()) {
return new int[]{-1};
}
int[] result = new int[stack.size()];
for (int i = result.length-1; i >= 0; i--) {
result[i] = stack.pop();
}
return result;
}
}
728x90
'프로그래머스(Java) > Level 0' 카테고리의 다른 글
[프로그래머스] 무작위로 K개의 수 뽑기 (0) | 2024.08.13 |
---|---|
[프로그래머스] 두 수의 합 (0) | 2024.08.13 |
[프로그래머스] 커피 심부름 (0) | 2024.08.13 |
[프로그래머스] 문자열 묶기 (0) | 2024.08.13 |
[프로그래머스] 세 개의 구분자 (0) | 2024.08.13 |