๐ ์ฝ๋ฉํ ์คํธ
โ๐ป Github
๋ฌธ์ ์ค๋ช
๋ฌธ์์ด s๊ฐ ์ ๋ ฅ๋์์ ๋ ๋ค์ ๊ท์น์ ๋ฐ๋ผ์ ์ด ๋ฌธ์์ด์ ์ฌ๋ฌ ๋ฌธ์์ด๋ก ๋ถํดํ๋ ค๊ณ ํฉ๋๋ค.
- ๋จผ์ ์ฒซ ๊ธ์๋ฅผ ์ฝ์ต๋๋ค. ์ด ๊ธ์๋ฅผ x๋ผ๊ณ ํฉ์๋ค.
- ์ด์ ์ด ๋ฌธ์์ด์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฝ์ด๋๊ฐ๋ฉด์, x์ x๊ฐ ์๋ ๋ค๋ฅธ ๊ธ์๋ค์ด ๋์จ ํ์๋ฅผ ๊ฐ๊ฐ ์ ๋๋ค. ์ฒ์์ผ๋ก ๋ ํ์๊ฐ ๊ฐ์์ง๋ ์๊ฐ ๋ฉ์ถ๊ณ , ์ง๊ธ๊น์ง ์ฝ์ ๋ฌธ์์ด์ ๋ถ๋ฆฌํฉ๋๋ค.
- s์์ ๋ถ๋ฆฌํ ๋ฌธ์์ด์ ๋นผ๊ณ ๋จ์ ๋ถ๋ถ์ ๋ํด์ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค. ๋จ์ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ข ๋ฃํฉ๋๋ค.
- ๋ง์ฝ ๋ ํ์๊ฐ ๋ค๋ฅธ ์ํ์์ ๋ ์ด์ ์ฝ์ ๊ธ์๊ฐ ์๋ค๋ฉด, ์ญ์ ์ง๊ธ๊น์ง ์ฝ์ ๋ฌธ์์ด์ ๋ถ๋ฆฌํ๊ณ , ์ข ๋ฃํฉ๋๋ค.
๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ ๊ณผ์ ๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ค๋ก ๋ถํดํ๊ณ , ๋ถํดํ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ return ํ๋ ํจ์ solution์ ์์ฑํ์ธ์.
์ ํ์ฌํญ
- 1 ≤ s์ ๊ธธ์ด ≤ 10,000
- s๋ ์์ด ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
s | result |
"banana" | 3 |
"abracadabra" | 6 |
"aaabbaccccabba" | 3 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
s="banana"์ธ ๊ฒฝ์ฐ ba - na - na์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
s="abracadabra"์ธ ๊ฒฝ์ฐ ab - ra - ca - da - br - a์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์ #3
s="aaabbaccccabba"์ธ ๊ฒฝ์ฐ aaabbacc - ccab - ba์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
๋ฌธ์ ํ์ด
๋์ ํ์ด
import Foundation
func solution(_ s:String) -> Int {
var stack = [Character]()
var count = 0
var answer = 0
for char in s {
if stack == [] {
stack.append(char)
}else if stack.last == char {
stack.append(char)
}else {
count += 1
}
if stack.count == count {
stack = []
answer += 1
count = 0
}
}
if stack != [] {
answer += 1
}
return answer
}
๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํ์๋ค.
๋ฐฐ์ด์ ์๋ฌด๊ฒ๋ ๋ค์ด์์ง ์๋ค๋ฉด, ๋ฐฐ์ด์ ์ถ๊ฐํ๊ฑฐ๋ ๋ฐฐ์ด ๋ง์ง๋ง์ ๋ ์์์ ๊ฐ๋ค๋ฉด ๋ฐฐ์ด์ ์ถ๊ฐํ๋๋ก ํ์๋ค.
x์ ๊ฐ์๋ stack.count๋ก ํ์ ํ๊ณ , x๊ฐ ์๋ ์น๊ตฌ๋ค์ ๊ฐ์๋ count๋ฅผ 1์ฉ ๋์ด๋ฉด์ ํ์ ํ์๋ค.
๊ทธ๋ ๊ฒ stack.count์ count๊ฐ ๊ฐ์์ง๋ค๋ฉด, ๋ฌธ์์ด์ด ํ๋ ๋ถ๋ฆฌ๊ฐ ๋์ด answer์ 1์ ๋์ฌ์ฃผ์๋ค.
๋ฌธ์ ์์ ๋ฌธ์์ด์ ๋ถ๋ฆฌํ์ฌ ์ถ๋ ฅํ๋ ๋ฌธ์ ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด์ ์ ๊ฒฝ์ ์ฐ๋ ๊ฒ ์๋ ๊ฐ์์ ์ด์ ์ ๋์ด ํ์๋ค.
" ๋ง์ฝ ๋ ํ์๊ฐ ๋ค๋ฅธ ์ํ์์ ๋ ์ด์ ์ฝ์ ๊ธ์๊ฐ ์๋ค๋ฉด ์ง๊ธ๊น์ง ์ฝ์ ๋ฌธ์์ด์ ๋ถ๋ฆฌํ๋ค"
๋ผ๋ ์กฐ๊ฑด์ด ์์ด์ ๋ฐ๋ณต๋ฌธ์ ๋๋๊ณ ๋ ๋ค์์๋ stack์ด ๋น์ด์์ง ์๋ค๋ฉด ์์ ๊ฒฝ์ฐ์ ํด๋นํ๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก answer ๊ฐ์๋ฅผ ํ๋ ๋ ์ฆ๊ฐ์์ผฐ๋ค.
์ด ๊ฒฝ์ฐ์ s์ ๊ธธ์ด๊ฐ ์ต๋ 10,000์ด๋ฏ๋ก ์๊ฐ ๋ณต์ก๋ O(n)์ด ์ต๋์ผ ๊ฒ์ด๋ค.
๋ค๋ฅธ ์ฌ๋ ํ์ด
import Foundation
func solution(_ s:String) -> Int {
var answer = 0
var x: Character? = nil
var xCount = 0
for i in s {
if x == nil {
x = i
xCount = 1
answer += 1
continue
}
xCount += x == i ? 1 : -1
if xCount == 0 {
x = nil
}
}
return answer
}
๋ฐฐ์ด๋ก ํ์ง ์๊ณ ๋ฌธ์์ด๋ก ํ์๋ค.
๋ฐฐ์ด๋ณด๋ค ์๊ฐ์ ๋ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ์ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.