C#/알고리즘 문제 풀기
프로그래머스 - 큰 수 만들기 (문자열 그리디)
Toa_
2025. 8. 1. 19:51

이 문제는 첫자리수가 가장 큰 수 << 가 키 포인트가 되는 문제임으로.
전체를 돌아가면서, 방금전 확인한 숫자와 지금 확인한 숫자의 크기 차이를 확인하며 앞에서부터 전체를 돌며 k--;
그럼에도 k 가 남는다면 이미 앞쪽은 조건에 맞게 최적의 숫자만 남았기 때문에 뒤에서부터 k만큼 제거.
의 방식으로 풀면된다.
이전 비슷한 문제를 풀어본 경험이 있어서 비교적 빨리 풀 수 있었다.
이때 돌아가며 하나하나 빼주는 방식보다 list 형식으로 나열하여 Concat으로 한번에 넣어주는 방식이 성능상으로 유리하기 때문에 Stack을 사용하여 나열 + 이전 숫자 확인을 할 수 있는 구조로 만들었다.
public string solution(string number, int k)
{
Stack<char> stack = new Stack<char>();
foreach (char c in number)
{
while (stack.Count > 0 && k > 0 && stack.Peek() < c)
{
stack.Pop();
k--;
}
stack.Push(c);
}
while (k > 0)
{
stack.Pop();
k--;
}
var result = stack.Reverse(); // Stack은 뒤집기
return string.Concat(result); // << 문자열을 하나하나 더하기 보다 Concat을 사용하는것이 성능상 유리
}