[프로그래머스 코딩테스트]Level 02 - 사전순 부분문자열

less than 1 minute read

Level 02 - 사전순 부분문자열

문제 설명

어떤 문자열 s가 주어졌을 때, s로부터 만들 수 있는 부분 문자열 중 사전 순으로 가장 뒤에 나오는 문자열을 찾으려 합니다. 부분 문자열을 만드는 방법은 다음과 같습니다.
s에서 일부 문자를 선택해 새로운 문자열을 만듭니다.
단, 이때 문자의 순서는 뒤바꾸지 않습니다.
예를 들어 문자열 xyb로 만들 수 있는 부분 문자열은 다음과 같습니다.
x
y
b
xy
xb
yb
xyb
이 중 사전 순으로 가장 뒤에 있는 문자열은 yb입니다.
문자열 s가 주어졌을 때 s로부터 만들 수 있는 부분 문자열 중 사전 순으로 가장 뒤에 나오는 문자열을 리턴하는 solution 함수를 완성해주세요.

제한 사항

  • s는 길이가 1 이상 1,000,000 이하인 문자열입니다.
  • s는 알파벳 소문자로만 이루어져 있습니다.

입출력 예

s result
“xyb” “yb”
def solution(s):
    stack = []
    for elem in s:
        while stack and stack[-1] < elem:
            stack.pop()
        stack.append(elem)
        # print(stack)
    return "".join(stack)

print(solution("xyb"))

스택으로 간단하게 풀 수 있는 문제이다. 문자열 안의 문자를 하나씩 보면서 스택이 비어있지 않고, 스택의 탑에 있는 것이 문자열에서 꺼낸 문자보다 작으면 스택에 들어있던 것을 꺼낸 뒤 문자를 새로 집어넣는다. 이렇게 하면 사전순으로 가장 큰(가장 뒤에 나오는)문자열을 만들 수 있다.

Categories:

Updated: