Open seungriyou opened 5 months ago
https://leetcode.com/problems/string-without-aaa-or-bbb/ similar to #70
단, s를 만들 수 있다는 것이 보장되어 있으므로 루프 내에서 예외 처리를 하지 않아도 된다.
s
s를 만들 수 있다는 것이 보장되어 있고, 문자가 두 가지 밖에 없기 때문에 다음과 같이 풀 수 있다.
a와 b가 모두 0 보다 클 때
a
b
0
a > b
a -= 2
b -= 1
res
"aab"
a < b
a -= 1
b -= 2
"bba"
a == b
"ab"
a와 b 중 하나라도 0이면
Idea 2를 recursive 한 방법으로도 작성할 수 있다.
O(nlog2)
O(n)
O(1)
Approach
Idea 1: Max Heap
78 문제와 동일하게 priority queue를 max heap으로 사용하여, 동일한 문자가 세 번 연달아 뽑힐 때는 다음 문자를 뽑는 방식으로 풀 수 있다.
단,
s
를 만들 수 있다는 것이 보장되어 있으므로 루프 내에서 예외 처리를 하지 않아도 된다.Idea 2: Iterative
s
를 만들 수 있다는 것이 보장되어 있고, 문자가 두 가지 밖에 없기 때문에 다음과 같이 풀 수 있다.a
와b
가 모두0
보다 클 때a > b
:a -= 2
,b -= 1
후res
에"aab"
추가a < b
:a -= 1
,b -= 2
후res
에"bba"
추가a == b
:a -= 1
,b -= 1
후res
에"ab"
추가a
와b
중 하나라도0
이면0
이 아닌 문자에 대해서는 남은 수만큼res
에 추가Idea 3: Recursive
Idea 2를 recursive 한 방법으로도 작성할 수 있다.
Complexity
O(nlog2)
=O(n)
/ (나머지)O(n)
O(1)
/ (recursive)O(n)
(recursion stack)