๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1] ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ

by hyebin (Helia) 2023. 3. 12.
๋ฐ˜์‘ํ˜•
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1 ๋ชจ์Œ

ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ์—์„œ ์ผ์„ ํ•˜๋Š” ์ƒ์ˆ˜๋Š” ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ๊ป˜ ์ผ์„ ํ•˜๋Š” ๋‹ค๋ฅธ ์ง์›๋“ค์ด ํ–„๋ฒ„๊ฑฐ์— ๋“ค์–ด๊ฐˆ ์žฌ๋ฃŒ๋ฅผ ์กฐ๋ฆฌํ•ด ์ฃผ๋ฉด ์กฐ๋ฆฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ƒ์ˆ˜์˜ ์•ž์— ์•„๋ž˜์„œ๋ถ€ํ„ฐ ์œ„๋กœ ์Œ“์ด๊ฒŒ ๋˜๊ณ , ์ƒ์ˆ˜๋Š” ์ˆœ์„œ์— ๋งž๊ฒŒ ์Œ“์—ฌ์„œ ์™„์„ฑ๋œ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋”ฐ๋กœ ์˜ฎ๊ฒจ ํฌ์žฅ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๊ฐ€ ์ผํ•˜๋Š” ๊ฐ€๊ฒŒ๋Š” ์ •ํ•ด์ง„ ์ˆœ์„œ(์•„๋ž˜์„œ๋ถ€ํ„ฐ, ๋นต – ์•ผ์ฑ„ – ๊ณ ๊ธฐ - ๋นต)๋กœ ์Œ“์ธ ํ–„๋ฒ„๊ฑฐ๋งŒ ํฌ์žฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๋Š” ์†์ด ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•˜๋Š” ๋™์•ˆ ์† ์žฌ๋ฃŒ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์ผ์€ ์—†์œผ๋ฉฐ, ์žฌ๋ฃŒ์˜ ๋†’์ด๋Š” ๋ฌด์‹œํ•˜์—ฌ ์žฌ๋ฃŒ๊ฐ€ ๋†’์ด ์Œ“์—ฌ์„œ ์ผ์ด ํž˜๋“ค์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์ˆ˜์˜ ์•ž์— ์Œ“์ด๋Š” ์žฌ๋ฃŒ์˜ ์ˆœ์„œ๊ฐ€ [์•ผ์ฑ„, ๋นต, ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ, ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ, ๋นต] ์ผ ๋•Œ, ์ƒ์ˆ˜๋Š” ์—ฌ์„ฏ ๋ฒˆ์งธ ์žฌ๋ฃŒ๊ฐ€ ์Œ“์˜€์„ ๋•Œ, ์„ธ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ถ€ํ„ฐ ์—ฌ์„ฏ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๊ณ , ์•„ํ™‰ ๋ฒˆ์งธ ์žฌ๋ฃŒ๊ฐ€ ์Œ“์˜€์„ ๋•Œ, ๋‘ ๋ฒˆ์งธ ์žฌ๋ฃŒ์™€ ์ผ๊ณฑ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ถ€ํ„ฐ ์•„ํ™‰ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, 2๊ฐœ์˜ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ƒ์ˆ˜์—๊ฒŒ ์ „ํ•ด์ง€๋Š” ์žฌ๋ฃŒ์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด ingredient๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•˜๋Š” ํ–„๋ฒ„๊ฑฐ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์‹œ์˜ค.

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ ingredient์˜ ๊ธธ์ด ≤ 1,000,000
  • ingredient์˜ ์›์†Œ๋Š” 1, 2, 3 ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’์ด๋ฉฐ, ์ˆœ์„œ๋Œ€๋กœ ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

ingredient result
[2, 1, 1, 2, 3, 1, 2, 3, 1] 2
[1, 3, 2, 1, 2, 1, 3, 1, 2] 0

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ–„๋ฒ„๊ฑฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ œ์ถœ

import Foundation

func solution(_ ingredient:[Int]) -> Int {
    var answer = 0
    var stack = [Int]()

    for i in ingredient{
        stack.append(i)

        if stack.count > 3 && (stack[stack.count-4...stack.count-1] == [1,2,3,1]){
            stack.removeLast(4)
            answer += 1
        }
    }
    return answer
}
ํ–„๋ฒ„๊ฑฐ์˜ ์žฌ๋ฃŒ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด ingredient์—์„œ ์š”์†Œ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ stack์— ์ €์žฅํ•œ๋‹ค.
stack์˜ ํฌ๊ธฐ๊ฐ€ 3 ์ด์ƒ์ด๊ณ , stack์—์„œ ๋งˆ์ง€๋ง‰ 4๊ฐœ์˜ ์š”์†Œ๊ฐ€ [1, 2, 3, 1]์ผ ๋•Œ (๋นต-์•ผ์ฑ„-๊ณ ๊ธฐ-๋นต) stack์—์„œ ๋งˆ์ง€๋ง‰ 4๊ฐœ์˜ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ , answer๋ณ€์ˆ˜๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
๋ชจ๋“  ์š”์†Œ๋ฅผ ํ™•์ธํ•œ ํ›„, answer ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

๋‹ค๋ฅธ ํ’€์ด

import Foundation

func solution(_ ingredient:[Int]) -> Int {
    var stacks: [Int] = []
    var count: Int = 0
    
    for ingredient in ingredient {
        stacks.append(ingredient)
        let suffix = stacks.suffix(4)
        if suffix == [1,2,3,1] {
            count += 1
            stacks.removeLast(4)
        }
    }
    return count
}
๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ stack์— ์ถ”๊ฐ€ํ•œ๋‹ค.
suffix ์ƒ์ˆ˜์— stack ๋ฐฐ์—ด์—์„œ ๋งˆ์ง€๋ง‰ 4๊ฐœ์˜ ์š”์†Œ๋“ค์„ ์ €์žฅํ•œ๋‹ค.
suffix๊ฐ€ [1, 2, 3, 1]์ด๋ผ๋ฉด, count ๋ณ€์ˆ˜๋ฅผ 1๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๋งˆ์ง€๋ง‰ 4๊ฐœ์˜ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
๋ฐ˜์‘ํ˜•