πŸ’†πŸ»‍♂️ ν”Ό-μ—μŠ€/🐣 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[μŠ€μœ„ν”„νŠΈ μ•Œκ³ λ¦¬μ¦˜] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€: 짝지어 μ œκ±°ν•˜κΈ°

κ°œλ°œν•˜λŠ” ν›ˆμ΄ 2021. 7. 31. 23:45

문제

짝지어 μ œκ±°ν•˜κΈ°λŠ”, μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œ 이루어진 λ¬Έμžμ—΄μ„ 가지고 μ‹œμž‘ν•©λ‹ˆλ‹€. λ¨Όμ € λ¬Έμžμ—΄μ—μ„œ 같은 μ•ŒνŒŒλ²³μ΄ 2개 λΆ™μ–΄ μžˆλŠ” 짝을 μ°ΎμŠ΅λ‹ˆλ‹€. κ·Έλ‹€μŒ, κ·Έ λ‘˜μ„ μ œκ±°ν•œ λ’€, μ•žλ’€λ‘œ λ¬Έμžμ—΄μ„ 이어 λΆ™μž…λ‹ˆλ‹€. 이 과정을 λ°˜λ³΅ν•΄μ„œ λ¬Έμžμ—΄μ„ λͺ¨λ‘ μ œκ±°ν•œλ‹€λ©΄ 짝지어 μ œκ±°ν•˜κΈ°κ°€ μ’…λ£Œλ©λ‹ˆλ‹€. λ¬Έμžμ—΄ Sκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 짝지어 μ œκ±°ν•˜κΈ°λ₯Ό μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆλŠ”μ§€ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”. μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰ν•  수 있으면 1을, 아닐 경우 0을 리턴해주면 λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, λ¬Έμžμ—΄ S = baabaa λΌλ©΄

 

b aa baa → bb aa → aa 

 

의 μˆœμ„œλ‘œ λ¬Έμžμ—΄μ„ λͺ¨λ‘ μ œκ±°ν•  수 μžˆμœΌλ―€λ‘œ 1을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

μ œν•œμ‚¬ν•­

  • λ¬Έμžμ—΄μ˜ 길이 : 1,000,000μ΄ν•˜μ˜ μžμ—°μˆ˜
  • λ¬Έμžμ—΄μ€ λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

풀이

μŠ€νƒμ„ μ‚¬μš©ν•΄μ„œ λ¬Έμžκ°€ λ‚˜μ˜¬ λ•Œλ§ˆλ‹€ μŠ€νƒμ˜ 제일 끝에 λ“€μ–΄μžˆλŠ” 문자면 μŠ€νƒμ—μ„œ 문자λ₯Ό λΉΌμ„œ μ—†μ• μ£Όκ³  μ•„λ‹Œ κ²½μš°μ—λŠ” μŠ€νƒμ— 계속 μ§‘μ–΄λ„£μŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰κΉŒμ§€ κ²€μ‚¬ν–ˆμ„ λ•Œ μŠ€νƒμ΄ 비지 μ•Šκ³  λ¬Έμžκ°€ λ‚¨μ•„μžˆλ‹€λ©΄ 더 이상 쀄일 수 μ—†κΈ° λ•Œλ¬Έμ— falseλ₯Ό λ°˜ν™˜ν•˜κ³ , μŠ€νƒμ΄ 빈 κ²½μš°μ—λŠ” λͺ¨λ“  짝이 λ§žμœΌλ―€λ‘œ trueλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ½”λ“œ

import Foundation

func solution(_ s:String) -> Int{
    var stack: [Character] = []
    
    for c in s {
        if !stack.isEmpty && stack.last! == c {
            stack.removeLast()
        } else {
            stack.append(c)
        }
    }

    return stack.isEmpty ? 1 : 0
}