[프로그래머스][큰 수 만들기]-Lv.2

호준·2022년 11월 16일
0

Algorithm

목록 보기
101/111
post-thumbnail

✨ 문제

문제링크

✨ 제한사항

✨ 접근방법

  1. stack에 첫번 째 숫자를 넣는다.
  2. 다음에 넣을 숫자가 stack 제일 위에 있는 숫자보다 크고 cnt가 k보다 작고 stack가 비지 않을 경우 cnt += 1과 pop()을 반복한다.
  3. stack에 다음에 넣을 숫자를 넣는다.
  4. cnt가 k를 안하고 끝나는 경우가 있어서 cnt가 k가 될 때까지 stack을 pop() 해준다.
  5. stack에 있는 숫자들을 리턴한다.

✨ 코드

import java.util.*;
class Solution {
    public String solution(String number, int k) {
        String answer = "";
        Stack<Character> stack = new Stack<>();
        int cnt = 0;
        stack.add(number.charAt(0));
        for(int i=1; i<number.length(); i++){
            // 1. 스택에 맨위가 다음 숫자보다 작을 경우
            if(stack.peek()-'0' < number.charAt(i) - '0'){
                while(!stack.isEmpty() && stack.peek() -'0' < number.charAt(i) - '0' && cnt<k){
                    stack.pop();
                    cnt++;
                }
            }
            stack.add(number.charAt(i));
        }
        while(cnt < k && !stack.isEmpty()){
            stack.pop();
            cnt++;
        }
        while(!stack.isEmpty()){
            answer = stack.pop() + answer;
        }
        return answer;
    }
}
profile
도전하지 않는 사람은 실패도 성공도 없다

0개의 댓글