큰 수 만들기

유태형·2022년 2월 16일
0

문제

문제 분석

1.k개의 숫자를 제거했을때 최대값이 되어야 한다.
2.숫자들간 순서는 유지되어야 한다.




풀이

스택 사용

최대값을 유지해야고 이전 값과 비교해야 하므로 스택을 사용
현재 값과 이전 최대값을 비교해 이전 스택의 값들이 더 크면 push, 현재 값이 더 크면 스택의 값이 더 클때까지 pop을 수행한다.

stack.peek() < c

top의 값이 새로 들어온 값보다 작으면 제거

k-- > 0

자리수를 맞춤




코드

import java.util.*;

class Solution {
    public String solution(String number, int k) {
        //결과를 담을 배열
        char[] result = new char[number.length() - k];
        Stack<Character> stack = new Stack<>();
        
        //문자열에서 한 숫자씩 (순서는 지켜야 함)
        for(int i = 0; i < number.length() ; i++){
            char c = number.charAt(i); //현재 숫자
            //스택이 비지 않고, 현재 값이 더 크고 제거해야 할 숫자가 남았을 동안
            while(!stack.isEmpty() && stack.peek() < c && k-- > 0){
                stack.pop(); //숫자 제거
            }
            stack.push(c); //현재 값 스택에 저장
        }
        //스택의 값 처음부터 (순서는 지켜야 함)
        for(int i = 0; i < stack.size(); i++){
            result[i] = stack.get(i);
        }
        return new String(result);
    }
}



GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%EC%9E%90%EB%B0%94/Level2/%ED%81%B0%EC%88%98%EB%A7%8C%EB%93%A4%EA%B8%B0.java

profile
오늘도 내일도 화이팅!

0개의 댓글

관련 채용 정보