-
[Programmers] 큰 수 만들기 (Java, Stack)Algorithm 2023. 2. 2. 07:34728x90반응형
- 목차
문제 설명.
https://school.programmers.co.kr/learn/courses/30/lessons/42883
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
제한 조건
- number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1 이상 number의 자릿수 미만인 자연수입니다.
입출력 예
"1924" 2 "94" "1231234" 3 "3234" "4177252841" 4 "775841" 문제 분석.
긴 자리수를 가지는 숫자가 제공됩니다.
예를 들면, 4177252841 이런 무작위한 패턴의 숫자가 제공됩니다.
이 숫자를 첫번째 자리수의 숫자부터 N 개의 숫자를 선별적으로 제거하여 가장 큰 수를 만들어야합니다.
만약 4177252841 숫자에서 4개의 개별 숫자를 제거하여 가장 큰 수를 만들기 위해서는
4, 1, 2, 2 를 제거하여 775841 을 생성하는 것이 가장 큰 수를 만드는 방법입니다.
이 과정에서 저는 Stack 을 사용하였구요.
Stack 에 값을 채워나가면서 큰 숫자를 만나게되면 Stack 을 비우는 방식으로 진행합니다.
4177252841
< 1st >
stack : 4
< 2nd >
stack : 4 1
< 3rd >
이 과정에서 가장 큰 숫자인 7 을 만나게되므로 Stack 을 Clear 합니다.
stack : 7
< 4th >
stack : 7 7
< 5th >
stack : 7 7 2
< 6th >
이 과정에서 2가 Pop 되고 5가 push 됩니다.
stack : 7 7 5
< 7th >
stack : 7 7 5 2
< 8th >
이 과정에서 2개 Pop 되고 8가 push 됩니다.
stack : 7 7 5 8
< 나머지 >
stack : 7 7 5 8 4 1
문제 풀이.
import java.util.*; import java.math.BigInteger; class Solution { public String solution(String number, int k) { StringBuilder max = new StringBuilder(); Stack<Integer> stack = new Stack<>(); for (int i = 0; i < number.length(); i++) { Integer value = Integer.parseInt(number.substring(i, i + 1)); if (i == 0) { stack.push(value); continue; } while (true) { if (k == 0) break; if (stack.isEmpty()) break; if (stack.peek() >= value) break; if (stack.peek() < value) { stack.pop(); k--; } } stack.push(value); } if (k > 0) return number.substring(0, number.length() - k); while (!stack.isEmpty()) { max = max.insert(0, stack.pop()); } return max.toString(); } }
반응형'Algorithm' 카테고리의 다른 글
[Java] Programmers 3차 n진수 게임 ( 진법 변환, base conversion) (0) 2023.02.06 [Python] Programmers N개의 최소공배수 (0) 2023.02.06 (Java) Programmers 스킬트리 (0) 2023.01.30 [Java] Programmers 3차 파일명 정렬 (0) 2023.01.26 [Java] 프로그래머스 다리를 지나는 트럭 ( Deque, Queue ) (0) 2023.01.26