코딩테스트
[프로그래머스] 큰 수 만들기_Java
오류유발자
2024. 4. 23. 10:56
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42883#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
1. 숫자로 이루어진 문자열 number에서 k개의 숫자를 제거하여 가장 큰 숫자를 문자열 형태로 return한다.
2. number는 2자리 이상, 1,000,000의 수로 시간복잡도 O(N²)의 알고리즘은 사용할 수 없다.
코드1 _index를 이용한 방법
index+k번째까지 체크하여 index의 숫자보다 큰 숫자가 있으면 index번째 숫자는 삭제한다.
class Solution {
public String solution(String number, int k) {
StringBuilder sb = new StringBuilder();
int len=number.length();
for(int i=0; i<len;i++){
char cur = number.charAt(i);
boolean isRemoveNumber = false;
for(int j=1; j<=k;j++){
if(j+i >= len) break;
if(cur<number.charAt(i+j)){
isRemoveNumber = true;
k--;
break;
}
}
if(!isRemoveNumber) sb.append(cur);
}
String result = sb.toString();
return result.substring(0,result.length()-k);
}
}
실행 결과1

코드2_Stack을 이용한 방법
stack을 이용하여 i번째 수보다 큰 수가 나올때까지 pop()
import java.util.Stack;
class Solution {
public String solution(String number, int k) {
Stack<Character> stack = new Stack();
for(char c : number.toCharArray()){
while(!stack.isEmpty() && stack.peek()<c && k>0){
stack.pop();
k--;
}
stack.push(c);
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<k;i++) stack.pop();
while(!stack.isEmpty()) sb.append(stack.pop());
sb.reverse();
return sb.toString();
}
}
실행 결과2
