https://school.programmers.co.kr/learn/challenges/training?order=recent&languages=java
코딩 기초 트레이닝 | 프로그래머스 스쿨
프로그래밍 언어를 처음 접하거나 프로그래밍 언어에 익숙해지고 싶다면? 코딩 역량을 탄탄하게 길러주는 코딩 기초 트레이닝으로 차근차근 코딩에 대한 기초 감각을 길러 보세요.
school.programmers.co.kr
문제
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 합니다.
풀이
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]);
} else if (stk.peek() == arr[i]) {
stk.pop();
} else {
stk.push(arr[i]);
}
i++;
}
if (stk.isEmpty()) {
return new int[]{-1};
}
int[] result = new int[stk.size()];
int idx = stk.size() - 1;
while (!stk.isEmpty()) {
result[idx--] = stk.pop();
}
return result;
}
}
GitHub · Build and ship software on a single, collaborative platform
Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.
github.com
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
'코딩 테스트 (Java) > 코딩 기초 트레이닝 (프로그래머스)' 카테고리의 다른 글
| 181857. 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2025.04.22 |
|---|---|
| 181858. 무작위로 K개의 수 뽑기 (0) | 2025.04.22 |
| 181860. 빈 배열에 추가, 삭제하기 (0) | 2025.04.22 |
| 181861. 배열의 원소만큼 추가하기 (0) | 2025.04.22 |
| 181862. 세 개의 구분자 (0) | 2025.04.22 |