๐ ์ฝ๋ฉํ ์คํธ
โ๐ป Github
๋ฌธ์ ์ค๋ช
์นด์นด์คํก์ ๋ฌ ๋ค ๋ฒ์งธ ๋ณ! ์ฌ์ฌํ ๋? ์นด์นด์คํก ๊ฒ์๋ณ~
์นด์นด์คํก ๊ฒ์๋ณ์ ํ๋ฐ๊ธฐ ์ ๊ท ์๋น์ค๋ก ๋คํธ ๊ฒ์์ ์ถ์ํ๊ธฐ๋ก ํ๋ค. ๋คํธ ๊ฒ์์ ๋คํธํ์ ๋คํธ๋ฅผ ์ธ ์ฐจ๋ก ๋์ ธ ๊ทธ ์ ์์ ํฉ๊ณ๋ก ์ค๋ ฅ์ ๊ฒจ๋ฃจ๋ ๊ฒ์์ผ๋ก, ๋ชจ๋๊ฐ ๊ฐ๋จํ ์ฆ๊ธธ ์ ์๋ค.
๊ฐ ์ ์ฌํ ๋ฌด์ง๋ ์ฝ๋ฉ ์ค๋ ฅ์ ์ธ์ ๋ฐ์ ๊ฒ์์ ํต์ฌ ๋ถ๋ถ์ธ ์ ์ ๊ณ์ฐ ๋ก์ง์ ๋งก๊ฒ ๋์๋ค. ๋คํธ ๊ฒ์์ ์ ์ ๊ณ์ฐ ๋ก์ง์ ์๋์ ๊ฐ๋ค.
- ๋คํธ ๊ฒ์์ ์ด 3๋ฒ์ ๊ธฐํ๋ก ๊ตฌ์ฑ๋๋ค.
- ๊ฐ ๊ธฐํ๋ง๋ค ์ป์ ์ ์๋ ์ ์๋ 0์ ์์ 10์ ๊น์ง์ด๋ค.
- ์ ์์ ํจ๊ป Single(S), Double(D), Triple(T) ์์ญ์ด ์กด์ฌํ๊ณ ๊ฐ ์์ญ ๋น์ฒจ ์ ์ ์์์ 1์ ๊ณฑ, 2์ ๊ณฑ, 3์ ๊ณฑ (์ ์ , ์ ์ , ์ ์ )์ผ๋ก ๊ณ์ฐ๋๋ค.
- ์ต์ ์ผ๋ก ์คํ์(*), ์์ฐจ์(#)์ด ์กด์ฌํ๋ฉฐ ์คํ์(*)๋น์ฒจ ์ ํด๋น ์ ์์ ๋ฐ๋ก ์ ์ ์ป์ ์ ์๋ฅผ ๊ฐ 2๋ฐฐ๋ก ๋ง๋ ๋ค. ์์ฐจ์(#) ๋น์ฒจ ์ ํด๋น ์ ์๋ ๋ง์ด๋์ค๋๋ค.
- ์คํ์(*)์ ์ฒซ ๋ฒ์งธ ๊ธฐํ์์๋ ๋์ฌ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ์คํ์(*)์ ์ ์๋ง 2๋ฐฐ๊ฐ ๋๋ค. (์์ 4๋ฒ ์ฐธ๊ณ )
- ์คํ์(*)์ ํจ๊ณผ๋ ๋ค๋ฅธ ์คํ์(*)์ ํจ๊ณผ์ ์ค์ฒฉ๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์ค์ฒฉ๋ ์คํ์(*)์ ์๋ 4๋ฐฐ๊ฐ ๋๋ค. (์์ 4๋ฒ ์ฐธ๊ณ )
- ์คํ์(*)์ ํจ๊ณผ๋ ์์ฐจ์(#)์ ํจ๊ณผ์ ์ค์ฒฉ๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์ค์ฒฉ๋ ์์ฐจ์(#)์ ์ ์๋ -2๋ฐฐ๊ฐ ๋๋ค. (์์ 5๋ฒ ์ฐธ๊ณ )
- Single(S), Double(D), Triple(T)์ ์ ์๋ง๋ค ํ๋์ฉ ์กด์ฌํ๋ค.
- ์คํ์(*), ์์ฐจ์(#)์ ์ ์๋ง๋ค ๋ ์ค ํ๋๋ง ์กด์ฌํ ์ ์์ผ๋ฉฐ, ์กด์ฌํ์ง ์์ ์๋ ์๋ค.
0~10์ ์ ์์ ๋ฌธ์ S, D, T, *, #๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ด ์ ๋ ฅ๋ ์ ์ด์ ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ๋ผ.
์ ๋ ฅ ํ์
"์ ์|๋ณด๋์ค|[์ต์ ]"์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด 3์ธํธ.
์) 1S2D*3T
- ์ ์๋ 0์์ 10 ์ฌ์ด์ ์ ์์ด๋ค.
- ๋ณด๋์ค๋ S, D, T ์ค ํ๋์ด๋ค.
- ์ต์ ์ *์ด๋ # ์ค ํ๋์ด๋ฉฐ, ์์ ์๋ ์๋ค.
์ถ๋ ฅ ํ์
3๋ฒ์ ๊ธฐํ์์ ์ป์ ์ ์ ํฉ๊ณ์ ํด๋นํ๋ ์ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์) 37
์ ์ถ๋ ฅ ์์
์์ | dartResult | answer | ์ค๋ช |
1 | 1S2D*3T | 37 | 11 * 2 + 22 * 2 + 33 |
2 | 1D2S#10S | 9 | 12 + 21 * (-1) + 101 |
3 | 1D2S0T | 3 | 12 + 21 + 03 |
4 | 1S2T3S | 23 | 11 * 2 * 2 + 23 * 2 + 31 |
5 | 1D#2S*3S | 5 | 12 * (-1) * 2 + 21 * 2 + 31 |
6 | 1T2D3D# | -4 | 13 + 22 + 32 * (-1) |
7 | 1D2S3T* | 59 | 12 + 21 * 2 + 33 * 2 |
๋ฌธ์ ํ์ด
๋์ ํ์ด
func solution(_ dartResult:String) -> Int {
// ์ ์ ๋ค์ด์จ ์ซ์ ์ ์ฅ
var beforeNum = 0
// ๋ฐฉ๊ธ ๋ค์ด์จ ์ซ์ ์ ์ฅ
var nowNum = 0
// ์ด ํฉ
var totalNum = 0
// ์ ์ ๋ค์ด์จ ์ซ์๋ฅผ ์ดํฉ์ ์ ์ฅํ๊ธฐ ์ํด ๋ค์ด์จ ์ซ์์ ๊ฐ์๋ฅผ ํค์๋ฆผ
var count = 0
var dartResult = Array(dartResult)
while !dartResult.isEmpty {
if let num = Int(String(dartResult.prefix(2))){
if count == 2 {
totalNum += beforeNum
}
beforeNum = nowNum
nowNum = num
count += 1
dartResult.removeFirst(2)
continue
}
if let num = Int(String(dartResult.first!)) {
if count == 2 {
totalNum += beforeNum
}
beforeNum = nowNum
nowNum = num
count += 1
dartResult.removeFirst()
continue
}
switch dartResult.first! {
case "D":
nowNum = nowNum * nowNum
case "T":
nowNum = nowNum * nowNum * nowNum
case "*":
nowNum = 2 * nowNum
beforeNum = 2 * beforeNum
case "#":
nowNum = -nowNum
default: //"S"
break
}
dartResult.removeFirst()
}
totalNum += beforeNum
totalNum += nowNum
return totalNum
}
์ฐ์ ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ฌธ์์ด์ ์ซ์์ ๋ฌธ์๋ก ๋๋๊ณ , ๋ฌธ์์ ๋ฐ๋ฅธ ์กฐ๊ฑด์ ๋ฃ์ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
ํ์ง๋ง ๋ฌธ์์ ์คํ์(*)์ด ์์ ๊ณผ ๊ทธ ์ ์ ๋์๋ ๊ฒ์ ๊ฐ์ 2๋ฐฐ๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํด์ ์ ์ ๋์๋ ๊ฐ์ ์ ์ฅํ ๋ณ์๊ฐ ํ์ํ๋ค.
→ ์ด์ ์ ๊ฐ
→ ํ์ฌ์ ๊ฐ
→ ๋ช ๋ฒ์งธ ์ซ์์ธ์ง ์นด์ดํธ
→ ์ ์ฒด ํฉ
๊ทธ๋์ ์ด๋ ๊ฒ ๋ณ์๋ฅผ ๋ง๋ค์ด๋๊ณ , if let ๋ฌธ์ผ๋ก ์ซ์์ธ์ง๋ฅผ ํ์ ํ ํ ์ซ์๊ฐ ์๋๋ผ๋ฉด switch ๋ฌธ์ ๋๋๋ก ๊ตฌํํ์๋ค. count๊ฐ 2๊ฐ ๋๋ฉด 3๋ฒ์งธ์ ๊ฐ์ด ์ ์ฅ๋์ด์ผ ํ๋ฏ๋ก ์ฒซ๋ฒ์งธ๊ฐ์ด total๋ก ์ ์ฅ์ด ๋๊ณ , ๋ฐฐ์ด์ด ๋๋๋ฉด ๋ค ๋ํ๊ธฐ๋ก ๊ตฌํํ์๋ค. ์ฌ๊ธฐ์ ๋์ ๋ฌธ์ ์ ์ 10์ด ๋ค์ด์์ ๋๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ค. ๊ทธ๋์ ๋ด๊ฐ ์๊ฐํ ๋ฐฉ๋ฒ์ ๋จผ์ ์์ 2 ๊ธ์๋ฅผ ๊บผ๋ด์ด if let ๋ฌธ์ ๋์ ํด๋ณด๊ณ ๋์ ์ด ๋๋ค๋ฉด ๊ทธ ์ซ์๋ 10์ด๋ฏ๋ก ๋ค์์ผ๋ก ๋์ด๊ฐ๋๋ก ๊ตฌํ์ ํ์๋ค.
ํ์ด๋ฅผ ์ ๋ค๋ณด๋ 3๊ฐ์ง์ ๋ฐฐ์ด์ ๊ฐ์ ์ ์ฅ์ ํด์ ๋ง์ง๋ง์ ๋ฐฐ์ด์ ์๋ ์๋ฅผ ๋ํ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
func solution(_ dartResult:String) -> Int {
// ๋ฌธ์์ด ๋ฐฐ์ด๋ก ๋ณํ
var dartResult = Array(dartResult)
// ๋ฐฉ๊ธ ๋ค์ด์จ ์ซ์ ์ ์ฅ
var nowNum = 0
// ์ซ์ ์ ์ฅ
var num = [Int]()
while !dartResult.isEmpty {
if dartResult.first!.isNumber {
num.append(nowNum)
if let num = Int(String(dartResult.prefix(2))){
nowNum = num
dartResult.removeFirst(2)
continue
}
if let num = Int(String(dartResult.first!)) {
nowNum = num
dartResult.removeFirst()
continue
}
}
switch dartResult.first! {
case "D":
nowNum = nowNum * nowNum
case "T":
nowNum = nowNum * nowNum * nowNum
case "*":
var n = num.count
num[n-1] *= 2
nowNum = 2 * nowNum
case "#":
nowNum = -nowNum
default: //"S"
break
}
dartResult.removeFirst()
}
num.append(nowNum)
return num.reduce(0, +)
}
์ด์ฐจํผ ์ซ์๊ฐ ๋ฑ 3๊ฐ๊ฐ ๋ค์ด์ค๋ ๋งจ ์์๋ ํญ์ 0์ ๋ฐฐ์นํ๊ณ ์์๋๋ก ์ฒซ๋ฒ์งธ, ๋๋ฒ์งธ, ์ธ๋ฒ์งธ๋ฅผ ๋ฃ๋๋กํ์ฌ 4๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ค์๋ค. ์ฒซ๋ฒ์งธ์๋ ๋ฌด์กฐ๊ฑด 0์ ๋ฐฐ์นํ ์ด์ ๋ ์คํ์์ด ๋ค์ด์์ ๊ฒฝ์ฐ์ ์์ ๊ณผ ๊ทธ ์์ ๋ฐฐ์ด์ด 2๋ฐฐ๊ฐ ๋๋๋ฐ ์ฒซ๋ฒ์งธ ๋ฐฐ์ด์ ์ ์ผ ์ฒ์์ผ๋ก ๋ฐฐ์นํ์ ๋ ์๋ฌ๊ฐ ๋ ๋ค๋ฅธ ์กฐ๊ฑด์ด ํ์ํ๋ค. ์ด๋ฅผ ์๋ตํ๊ธฐ ์ํด ์ฒซ๋ฒ์งธ์ 0์ ๋ฐฐ์นํ์๊ณ , ์นด์ดํฐ๋ฅผ ๋ฐ๋ก ์ธ์ง ์์์ ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํด์ก๋ค. isNumber๋ผ๋ ๋ณ์ ์กฐ๊ฑด๋ฌธ๋ ์ถ๊ฐํ์ฌ ํ์์๋ ์กฐ๊ฑด ๋น๊ต ๊ณผ์ ์ ์๋ตํ๋ค.
์์ ์ฝ๋์ ์๊ฐ์ ๋น๊ตํด๋ณด์.
1๋ฒ ์ฝ๋
ํ
์คํธ 1 ใ ํต๊ณผ (0.08ms, 16.4MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.09ms, 16.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.10ms, 16.5MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.08ms, 16.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.12ms, 16.5MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.09ms, 16.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.09ms, 16.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.09ms, 16.3MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.08ms, 16.5MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.14ms, 16.4MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.09ms, 16.3MB)
ํ
์คํธ 12 ใ ํต๊ณผ (0.08ms, 16.4MB)
ํ
์คํธ 13 ใ ํต๊ณผ (0.09ms, 16.3MB)
ํ
์คํธ 14 ใ ํต๊ณผ (0.09ms, 16.2MB)
ํ
์คํธ 15 ใ ํต๊ณผ (0.14ms, 16.2MB)
ํ
์คํธ 16 ใ ํต๊ณผ (0.12ms, 16.5MB)
ํ
์คํธ 17 ใ ํต๊ณผ (0.09ms, 16.3MB)
ํ
์คํธ 18 ใ ํต๊ณผ (0.14ms, 16.6MB)
ํ
์คํธ 19 ใ ํต๊ณผ (0.13ms, 16.5MB)
ํ
์คํธ 20 ใ ํต๊ณผ (0.15ms, 16.3MB)
ํ
์คํธ 21 ใ ํต๊ณผ (0.15ms, 16.6MB)
ํ
์คํธ 22 ใ ํต๊ณผ (0.11ms, 16.4MB)
ํ
์คํธ 23 ใ ํต๊ณผ (0.13ms, 16.3MB)
ํ
์คํธ 24 ใ ํต๊ณผ (0.09ms, 16.2MB)
ํ
์คํธ 25 ใ ํต๊ณผ (0.14ms, 16.2MB)
ํ
์คํธ 26 ใ ํต๊ณผ (0.14ms, 16.4MB)
ํ
์คํธ 27 ใ ํต๊ณผ (0.11ms, 16.6MB)
ํ
์คํธ 28 ใ ํต๊ณผ (0.14ms, 16.4MB)
ํ
์คํธ 29 ใ ํต๊ณผ (0.15ms, 16.1MB)
ํ
์คํธ 30 ใ ํต๊ณผ (0.09ms, 16.4MB)
ํ
์คํธ 31 ใ ํต๊ณผ (0.10ms, 16.4MB)
ํ
์คํธ 32 ใ ํต๊ณผ (0.10ms, 16.6MB)
2๋ฒ ์ฝ๋
ํ
์คํธ 1 ใ ํต๊ณผ (0.13ms, 16.8MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.13ms, 16.5MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.13ms, 16.5MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.14ms, 16.7MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.11ms, 16.6MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.13ms, 16.6MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.12ms, 16.6MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.12ms, 16.6MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.14ms, 16.8MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.12ms, 16.7MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.14ms, 16.8MB)
ํ
์คํธ 12 ใ ํต๊ณผ (0.13ms, 16.6MB)
ํ
์คํธ 13 ใ ํต๊ณผ (0.11ms, 16.5MB)
ํ
์คํธ 14 ใ ํต๊ณผ (0.14ms, 16.8MB)
ํ
์คํธ 15 ใ ํต๊ณผ (0.13ms, 16.3MB)
ํ
์คํธ 16 ใ ํต๊ณผ (0.13ms, 16.5MB)
ํ
์คํธ 17 ใ ํต๊ณผ (0.17ms, 16.6MB)
ํ
์คํธ 18 ใ ํต๊ณผ (0.14ms, 16.6MB)
ํ
์คํธ 19 ใ ํต๊ณผ (0.12ms, 16.6MB)
ํ
์คํธ 20 ใ ํต๊ณผ (0.13ms, 16.6MB)
ํ
์คํธ 21 ใ ํต๊ณผ (0.13ms, 16.5MB)
ํ
์คํธ 22 ใ ํต๊ณผ (0.23ms, 16.8MB)
ํ
์คํธ 23 ใ ํต๊ณผ (0.18ms, 16.7MB)
ํ
์คํธ 24 ใ ํต๊ณผ (0.16ms, 16.4MB)
ํ
์คํธ 25 ใ ํต๊ณผ (0.13ms, 16.6MB)
ํ
์คํธ 26 ใ ํต๊ณผ (0.20ms, 16.5MB)
ํ
์คํธ 27 ใ ํต๊ณผ (0.22ms, 16.5MB)
ํ
์คํธ 28 ใ ํต๊ณผ (0.14ms, 16.5MB)
ํ
์คํธ 29 ใ ํต๊ณผ (0.18ms, 16.6MB)
ํ
์คํธ 30 ใ ํต๊ณผ (0.20ms, 16.8MB)
ํ
์คํธ 31 ใ ํต๊ณผ (0.14ms, 16.8MB)
ํ
์คํธ 32 ใ ํต๊ณผ (0.14ms, 16.8MB)
์ฝ๋๋ ๊น๋ํด์ก์ง๋ง ์คํ๋ ค 1๋ฒ์ฝ๋์ ์คํ์๊ฐ์ด ๋ ์งง์๋ค.
์ด์ ๋ ๋ฐฐ์ด์ ๋ง๋ฌ์ผ๋ก์จ ์ดํฉ์ ๋ณ์์ ๋ํ๋ฉด์ ์ ์ฅํ๋ ๊ฒ์ด ์๋ 4๊ฐ์ ๋ฐฐ์ด์ ํ์ผ๋ฉด์ ๋ํด์ผํ๋ reduce ์ฝ๋๊ฐ ์ถ๊ฐ ๋์๊ธฐ ๋๋ฌธ์ธ ๊ฒ ๊ฐ๋ค.