
내가 생각했을때 문제에서 원하는부분
정수 배열 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 함수를 완성해 주세요.
내가 이 문제를 보고 생각해본 부분
주어진 정수 배열 arr를 순차적으로 처리하여 새로운 배열을 만드는 알고리즘이다.
배열을 처음부터 끝까지 반복하면서, 결과를 담을 stk 리스트에 값을 추가하거나 제거하는 방식을 따른다.
먼저, stk가 비어 있으면 현재 원소를 바로 추가하고 다음 원소로 넘어간다.
stk에 원소가 있을 때는 마지막 원소와 현재 원소를 비교한다.
마지막 원소가 현재 원소보다 작으면 현재 원소를 추가하고 다음 원소로 이동한다.
반면, 마지막 원소가 크거나 같으면 stk의 마지막 원소를 제거한다.
이 과정을 배열 길이만큼 반복하여 최종적으로 요구 조건에 맞는 배열을 만든다.
마지막에는 리스트 형태인 stk를 정수 배열로 변환해 반환한다.
main 메서드에서는 예시 배열 [1, 4, 2, 5, 3]을 이용해 solution 함수 결과를 출력한다.
실행 결과는 [1, 2, 3]으로, 주어진 문제에서 요구한 조건에 따라 잘 작동함을 확인할 수 있다.
배열 출력 형식을 대괄호와 쉼표로 맞추어 사람이 읽기 편하게 처리했다.
코드로 구현
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] arr) {
List<Integer> stk = new ArrayList<>();
int i = 0;
while (i < arr.length) {
if (stk.isEmpty()) {
stk.add(arr[i]);
i++;
} else {
int last = stk.get(stk.size() - 1);
if (last < arr[i]) {
stk.add(arr[i]);
i++;
} else {
stk.remove(stk.size() - 1);
}
}
}
int[] answer = new int[stk.size()];
for (int j = 0; j < stk.size(); j++) {
answer[j] = stk.get(j);
}
return answer;
}
}
프로그래머스 코드
package programmers;
import java.util.ArrayList;
import java.util.List;
// 프로그래머스 배열 만들기 4
public class Main27 {
// 주어진 조건에 따라 배열을 처리하는 메서드
public static int[] solution(int[] arr) {
List<Integer> stk = new ArrayList<>();
int i = 0;
// i가 arr의 길이보다 작을 동안 반복
while (i < arr.length) {
if (stk.isEmpty()) { // stk이 비어 있으면 arr[i] 추가 후 i 증가
stk.add(arr[i]);
i++;
} else {
int last = stk.get(stk.size() - 1); // stk 마지막 원소 확인
if (last < arr[i]) { // 마지막 원소가 arr[i]보다 작으면 추가 후 i 증가
stk.add(arr[i]);
i++;
} else { // 마지막 원소가 arr[i]보다 크거나 같으면 마지막 원소 제거
stk.remove(stk.size() - 1);
}
}
}
// 리스트를 배열로 변환하여 반환
int[] answer = new int[stk.size()];
for (int j = 0; j < stk.size(); j++) {
answer[j] = stk.get(j);
}
return answer;
}
public static void main(String[] args) {
int[] arr = {1, 4, 2, 5, 3};
int[] result = solution(arr);
System.out.print("[");
for (int i = 0; i < result.length; i++) {
System.out.print(result[i]);
if (i != result.length - 1) {
System.out.print(", ");
}
}
System.out.println("]");
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.