Programmers - 사전순 부분문자열
문제 설명
어떤 문자열 s가 주어졌을 때, s로부터 만들 수 있는 부분 문자열 중 사전 순으로 가장 뒤에 나오는 문자열을 찾으려 합니다. 부분 문자열을 만드는 방법은 다음과 같습니다.
- s에서 일부 문자를 선택해 새로운 문자열을 만듭니다.
- 단, 이때 문자의 순서는 뒤바꾸지 않습니다.
예를 들어 문자열 xyb로 만들 수 있는 부분 문자열은 다음과 같습니다.
x
y
b
xy
xb
yb
xyb
이 중 사전 순으로 가장 뒤에 있는 문자열은 "yb" 입니다.
문자열 s가 주어졌을 때 s로부터 만들 수 있는 부분 문자열 중 사전 순으로 가장 뒤에 나오는 문자열을 리턴하는 solution 함수를 완성해주세요.
제한 사항
- s는 길이가 1 이상 1,000,000 이하인 문자열입니다.
- s는 알파벳 소문자로만 이루어져 있습니다.
제출 코드
Python
def solution(s):
stack = []
for char in s:
while stack and stack[-1] < char:
stack.pop()
stack.append(char)
return ''.join(stack)
Swift
func solution(_ s: String) -> String {
var stack = [Character]()
for char in s {
let idx = stack.count - 1
while stack.count != 0 && stack[idx] < char {
stack.popLast()
}
stack.append(char)
}
return String(stack)
}
문제 풀이
s
문자열을 순회하면서 stack
에 맨 뒤 문자보다 현재 문자의 값이 크다면 해당 값을 pop
하고 현재 문자를 append
한다.
그 외의 경우, 그냥 append
한다.
while
문을 통한 비교가 해당 문제 풀이의 핵심이다.
'Algorithm & SQL > Programmers' 카테고리의 다른 글
[Algorithm] [Python] Programmers - 배상 비용 최소화 (0) | 2020.09.06 |
---|---|
[Algorithm][Python] Programmers - 구명보트 (0) | 2020.09.02 |
[Algorithm] [Python&Swift] Programmers - 최솟값 만들기 (0) | 2020.06.16 |
[Algorithm] [Python/Swift] Programmers - 오픈채팅방 (0) | 2020.06.14 |
[Algorithm] [Python/Swift] Programmers - 다음 큰 숫자 (0) | 2020.06.13 |