๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์‡ ๋ง‰๋Œ€๊ธฐ Swift

by Fomagran ๐Ÿ’ป 2020. 3. 28.
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ๋ ˆ์ด์ €๋กœ ์ ˆ๋‹จํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํšจ์œจ์ ์ธ ์ž‘์—…์„ ์œ„ํ•ด์„œ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ์•„๋ž˜์—์„œ ์œ„๋กœ ๊ฒน์ณ ๋†“๊ณ , ๋ ˆ์ด์ €๋ฅผ ์œ„์—์„œ ์ˆ˜์ง์œผ๋กœ ๋ฐœ์‚ฌํ•˜์—ฌ ์‡ ๋ง‰๋Œ€๊ธฐ๋“ค์„ ์ž๋ฆ…๋‹ˆ๋‹ค. ์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด์ €์˜ ๋ฐฐ์น˜๋Š” ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.

- ์‡ ๋ง‰๋Œ€๊ธฐ๋Š” ์ž์‹ ๋ณด๋‹ค ๊ธด ์‡ ๋ง‰๋Œ€๊ธฐ ์œ„์—๋งŒ ๋†“์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ๋‹ค๋ฅธ ์‡ ๋ง‰๋Œ€๊ธฐ ์œ„์— ๋†“๋Š” ๊ฒฝ์šฐ ์™„์ „ํžˆ ํฌํ•จ๋˜๋„๋ก ๋†“๋˜, ๋์ ์€ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ๋†“์Šต๋‹ˆ๋‹ค. - ๊ฐ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ์ž๋ฅด๋Š” ๋ ˆ์ด์ €๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. - ๋ ˆ์ด์ €๋Š” ์–ด๋–ค ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ์–‘ ๋์ ๊ณผ๋„ ๊ฒน์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์˜ˆ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ˆ˜ํ‰์œผ๋กœ ๊ทธ๋ ค์ง„ ๊ตต์€ ์‹ค์„ ์€ ์‡ ๋ง‰๋Œ€๊ธฐ์ด๊ณ , ์ ์€ ๋ ˆ์ด์ €์˜ ์œ„์น˜, ์ˆ˜์ง์œผ๋กœ ๊ทธ๋ ค์ง„ ์ ์„  ํ™”์‚ดํ‘œ๋Š” ๋ ˆ์ด์ €์˜ ๋ฐœ์‚ฌ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ ˆ์ด์ €์™€ ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๋ฐฐ์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(a) ๋ ˆ์ด์ €๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ์˜ ์ธ์ ‘ํ•œ ์Œ '()'์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  '()'๋Š” ๋ฐ˜๋“œ์‹œ ๋ ˆ์ด์ €๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. (b) ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ์™ผ์ชฝ ๋์€ ์—ฌ๋Š” ๊ด„ํ˜ธ '('๋กœ, ์˜ค๋ฅธ์ชฝ ๋์€ ๋‹ซํžŒ ๊ด„ํ˜ธ ')'๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์˜ ๊ด„ํ˜ธ ํ‘œํ˜„์€ ๊ทธ๋ฆผ ์œ„์— ์ฃผ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
์‡ ๋ง‰๋Œ€๊ธฐ๋Š” ๋ ˆ์ด์ €์— ์˜ํ•ด ๋ช‡ ๊ฐœ์˜ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ฆฌ๋Š”๋ฐ, ์œ„ ์˜ˆ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์‡ ๋ง‰๋Œ€๊ธฐ๋Š” ๊ฐ๊ฐ 3๊ฐœ์™€ 2๊ฐœ์˜ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ฆฌ๊ณ , ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์–ด์ง„ ์‡ ๋ง‰๋Œ€๊ธฐ๋“ค์€ ์ด 17๊ฐœ์˜ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ฆฝ๋‹ˆ๋‹ค.

์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด์ €์˜ ๋ฐฐ์น˜๋ฅผ ํ‘œํ˜„ํ•œ ๋ฌธ์ž์—ด arrangement๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ž˜๋ฆฐ ์‡ ๋ง‰๋Œ€๊ธฐ ์กฐ๊ฐ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • arrangement์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 100,000์ž…๋‹ˆ๋‹ค.
  • arrangement์˜ ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ๋Š” ํ•ญ์ƒ ์Œ์„ ์ด๋ฃน๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

arrangement return
()(((()())(())()))(()) 17

ํ’€์ด:์šฐ์„  arrangement์˜ ๋ฌธ์ž๋“ค์„ map์œผ๋กœ ๊ฐ ๊ฐ ๋ฐฐ์—ด์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.(amap)

๊ทธ๋ฆฌ๊ณ  for๋ฌธ์„ ์‚ฌ์šฉํ•ด map์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ๋“ค์„ ์ฐจ๋ก€๋กœ ํ•˜๋‚˜์”ฉ ์ง€๋‚˜๋ฉด์„œ

์ฒซ๋ฒˆ์งธ if๋ฌธ -> "("์ด ๋“ค์–ด์žˆ์„ ๋• bararr์— ๋ ˆ์ด์ € ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 0์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. -> ๋ฐ” ๋ง‰๋Œ€๊ธฐ ํ•˜๋‚˜๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค๋Š” ๋œป์œผ๋กœ ๊ฐ„์ฃผํ–ˆ๋‹ค.

๋‘๋ฒˆ์งธ if๋ฌธ -> ์ „์— ๋ฌธ์ž๊ฐ€ "("๊ณ  ๋ฐ”๋กœ ๊ทธ๋‹ค์Œ ๊ฒƒ์ด ")"๋ผ๋ฉด "()"์ด ๋˜๋ฏ€๋กœ ๋ ˆ์ด์ €๋กœ ๊ฐ„์ฃผํ•˜๊ณ  bararr์— ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“  ๋ง‰๋Œ€๊ธฐ์— ๋ ˆ์ด์ €์˜ ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค.

์„ธ๋ฒˆ์งธ if๋ฌธ -> ์ „์— ๋ฌธ์ž๊ฐ€ ")"๊ณ  ๋ฐ”๋กœ ๊ทธ๋‹ค์Œ ๊ฒƒ์ด ")"๋ผ๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ๋ง‰๋Œ€๊ธฐ๊ฐ€ ๋์ด ๋‚ฌ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ๊ทธ ๋ง‰๋Œ€๊ธฐ์— ๋ ˆ์ด์ €์˜ ์ˆ˜๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์˜ bararr์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— bararr์˜ last์—์„œ ๋ง‰๋Œ€๊ธฐ๋ฅผ ๋ ˆ์ด์ €๋กœ ๋‚˜๋ˆ„๋ฉด +1์ด ๋˜๋ฏ€๋กœ ๋ ˆ์ด์ €์ˆ˜ + 1์„ answer์— ๋”ํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณค ๋งˆ์ง€๋ง‰์—” bararr.removeLast()๋ฅผ ํ•ญ์ƒ ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ์ฒซ ๋ฒˆ์งธ if๋ฌธ๊ณผ ๋‘๋ฒˆ์งธ if๋ฌธ์—์„œ "("ํ•œ๋ฒˆ์”ฉ ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
func solution(_ arrangement:String-> Int {
    let amap = arrangement.map{$0}
    var answer = 0
    var bararr = [Int]()
    for i in 0..<arrangement.count {
        if amap[i] == "("{
            bararr.append(0)
            continue
        }
        if amap[i-1== "(" && amap[i] == ")"{
            for j in 0..<bararr.count{
                bararr[j] += 1
            }
        }
        if amap[i-1== ")" && amap[i] == ")"{
            answer += bararr.last! + 1
        }
        bararr.removeLast()
    }
    return answer
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€