원본 : https://school.programmers.co.kr/learn/courses/30/lessons/42883
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
import java.util.*;
class Solution {
public String solution(String number, int k) {
int[] arr = Arrays.stream(number.split("")).mapToInt(Integer::parseInt).toArray();
int[] answer = new int[arr.length];
Arrays.fill(answer, -1);
int cnt = 1;
Stack<int[]> stack = new Stack<>();
int maxIdx = getMaxIdx(arr, 0, arr.length - 1);
answer[maxIdx] = arr[maxIdx];
stack.add(new int[]{0, maxIdx - 1});
stack.add(new int[]{maxIdx + 1, arr.length - 1});
if (cnt == arr.length - k) {
return getAnswer(answer);
}
while (!stack.isEmpty()) {
int[] temp = stack.pop();
int startIdx = temp[0];
int endIdx = temp[1];
if (startIdx <= endIdx) {
maxIdx = getMaxIdx(arr, startIdx, endIdx);
cnt++;
answer[maxIdx] = arr[maxIdx];
stack.add(new int[]{startIdx, maxIdx - 1});
stack.add(new int[]{maxIdx + 1, endIdx});
}
if (cnt == arr.length - k) {
return getAnswer(answer);
}
}
return "";
}
public int getMaxIdx(int[] arr, int startIdx, int endIdx) {
int max = -1;
int maxIdx = -1;
for (int i = startIdx; i <= endIdx; i++) {
if (arr[i] > max) {
max = arr[i];
maxIdx = i;
}
}
return maxIdx;
}
public String getAnswer(int[] arr) {
StringBuilder sb = new StringBuilder();
for (int num : arr) {
if (num != -1) {
sb.append(num);
}
}
return sb.toString();
}
}
[1차] 프렌즈4블록 (2018 KAKAO BLIND RECRUITMENT) (0) | 2022.07.15 |
---|---|
피로도 (완전탐색) (0) | 2022.07.15 |
카펫 (완전탐색) (0) | 2022.07.14 |
H-Index (정렬) (0) | 2022.07.14 |
다리를 지나는 트럭 (스택/큐) (0) | 2022.07.11 |
댓글 영역