https://school.programmers.co.kr/learn/courses/30/lessons/181918
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.
변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.
- 만약
stk가 빈 배열이라면arr[i]를stk에 추가하고i에 1을 더합니다. stk에 원소가 있고,stk의 마지막 원소가arr[i]보다 작으면arr[i]를stk의 뒤에 추가하고i에 1을 더합니다.stk에 원소가 있는데stk의 마지막 원소가arr[i]보다 크거나 같으면stk의 마지막 원소를stk에서 제거합니다.
위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤
arr의 길이 ≤ 100,000- 1 ≤
arr의 원소 ≤ 100,000
- 1 ≤
입출력 예
| arr | result |
|---|---|
| [1, 4, 2, 5, 3] | [1, 2, 3] |
입출력 예 #1
- 각 작업을 마친 후에 배열의 변화를 나타내면 다음 표와 같습니다.
| i | arr[i] | stk |
|---|---|---|
| 0 | 1 | [] |
| 1 | 4 | [1] |
| 2 | 2 | [1, 4] |
| 2 | 2 | [1] |
| 3 | 5 | [1, 2] |
| 4 | 3 | [1, 2, 5] |
| 4 | 3 | [1, 2] |
| - | - | [1, 2, 3] |
- 따라서 [1, 2, 3]을 return 합니다.
풀이
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
Stack<Integer> stk = new Stack<>();
int i = 0;
while (i < arr.length) {
if (stk.isEmpty()) {
stk.push(arr[i]);
i++;
} else if (stk.peek() < arr[i]) {
stk.push(arr[i]);
i++;
} else {
stk.pop();
}
}
int[] answer = new int[stk.size()];
for (int j = stk.size() - 1; j >= 0; j--) {
answer[j] = stk.pop();
}
return answer;
}
}
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
'코딩 테스트 (Java) > 코딩 기초 트레이닝 (프로그래머스)' 카테고리의 다른 글
| 181916. 주사위 게임 3 (1) | 2025.04.08 |
|---|---|
| 181917. 간단한 논리 연산 (0) | 2025.04.08 |
| 181919. 콜라츠 수열 만들기 (0) | 2025.04.07 |
| 181920. 카운트 업 (0) | 2025.04.07 |
| 181921. 배열 만들기 2 (0) | 2025.04.07 |