๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/67257

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ˆ˜์‹ ์ตœ๋Œ€ํ™”

IT ๋ฒค์ฒ˜ ํšŒ์‚ฌ๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด์–ธ์€ ๋งค๋…„ ์‚ฌ๋‚ด ํ•ด์ปคํ†ค ๋Œ€ํšŒ๋ฅผ ๊ฐœ์ตœํ•˜์—ฌ ์šฐ์Šน์ž์—๊ฒŒ ์ƒ๊ธˆ์„ ์ง€๊ธ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋Œ€ํšŒ์—์„œ๋Š” ์šฐ์Šน์ž์—๊ฒŒ ์ง€๊ธ‰๋˜๋Š” ์ƒ๊ธˆ์„ ์ด์ „ ๋Œ€ํšŒ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋‹ค์Œ๊ณผ

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

IT ๋ฒค์ฒ˜ ํšŒ์‚ฌ๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด์–ธ์€ ๋งค๋…„ ์‚ฌ๋‚ด ํ•ด์ปคํ†ค ๋Œ€ํšŒ๋ฅผ ๊ฐœ์ตœํ•˜์—ฌ ์šฐ์Šน์ž์—๊ฒŒ ์ƒ๊ธˆ์„ ์ง€๊ธ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋ฒˆ ๋Œ€ํšŒ์—์„œ๋Š” ์šฐ์Šน์ž์—๊ฒŒ ์ง€๊ธ‰๋˜๋Š” ์ƒ๊ธˆ์„ ์ด์ „ ๋Œ€ํšŒ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


ํ•ด์ปคํ†ค ๋Œ€ํšŒ์— ์ฐธ๊ฐ€ํ•˜๋Š” ๋ชจ๋“  ์ฐธ๊ฐ€์ž๋“ค์—๊ฒŒ๋Š” ์ˆซ์ž๋“ค๊ณผ 3๊ฐ€์ง€์˜ ์—ฐ์‚ฐ๋ฌธ์ž(+, -, *) ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์—ฐ์‚ฐ ์ˆ˜์‹์ด ์ „๋‹ฌ๋˜๋ฉฐ, ์ฐธ๊ฐ€์ž์˜ ๋ฏธ์…˜์€ ์ „๋‹ฌ๋ฐ›์€ ์ˆ˜์‹์— ํฌํ•จ๋œ ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์žฌ์ •์˜ํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๋‹จ, ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•  ๋•Œ, ๊ฐ™์€ ์ˆœ์œ„์˜ ์—ฐ์‚ฐ์ž๋Š” ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, + > - > * ๋˜๋Š” - > * > + ๋“ฑ๊ณผ ๊ฐ™์ด ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ +,* > - ๋˜๋Š” * > +,-์ฒ˜๋Ÿผ 2๊ฐœ ์ด์ƒ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ๋™์ผํ•œ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋„๋ก ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •์˜ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹์— ํฌํ•จ๋œ ์—ฐ์‚ฐ์ž๊ฐ€ 2๊ฐœ๋ผ๋ฉด ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ์กฐํ•ฉ์€ 2! = 2๊ฐ€์ง€์ด๋ฉฐ, ์—ฐ์‚ฐ์ž๊ฐ€ 3๊ฐœ๋ผ๋ฉด 3! = 6๊ฐ€์ง€ ์กฐํ•ฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๋งŒ์•ฝ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ€ ์Œ์ˆ˜๋ผ๋ฉด ํ•ด๋‹น ์ˆซ์ž์˜ ์ ˆ๋Œ“๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ œ์ถœํ•˜๋ฉฐ ์ œ์ถœํ•œ ์ˆซ์ž๊ฐ€ ๊ฐ€์žฅ ํฐ ์ฐธ๊ฐ€์ž๋ฅผ ์šฐ์Šน์ž๋กœ ์„ ์ •ํ•˜๋ฉฐ, ์šฐ์Šน์ž๊ฐ€ ์ œ์ถœํ•œ ์ˆซ์ž๋ฅผ ์šฐ์Šน์ƒ๊ธˆ์œผ๋กœ ์ง€๊ธ‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฐธ๊ฐ€์ž ์ค‘ ๋„ค์˜ค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆ˜์‹์„ ์ „๋‹ฌ๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

"100-200*300-500+20"

์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ•™ ๋ฐ ์ „์‚ฐํ•™์—์„œ ์•ฝ์†๋œ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ฅด๋ฉด ๋”ํ•˜๊ธฐ์™€ ๋นผ๊ธฐ๋Š” ์„œ๋กœ ๋™๋“ฑํ•˜๋ฉฐ ๊ณฑํ•˜๊ธฐ๋Š” ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ์— ๋น„ํ•ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„ * > +,- ๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๋Œ€ํšŒ ๊ทœ์น™์— ๋”ฐ๋ผ + > - > * ๋˜๋Š” - > * > + ๋“ฑ๊ณผ ๊ฐ™์ด ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ +,* > - ๋˜๋Š” * > +,- ์ฒ˜๋Ÿผ 2๊ฐœ ์ด์ƒ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ๋™์ผํ•œ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋„๋ก ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •์˜ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.


์ˆ˜์‹์— ์—ฐ์‚ฐ์ž๊ฐ€ 3๊ฐœ ์ฃผ์–ด์กŒ์œผ๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ์กฐํ•ฉ์€ 3! = 6๊ฐ€์ง€์ด๋ฉฐ, ๊ทธ ์ค‘ + > - > * ๋กœ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•œ๋‹ค๋ฉด ๊ฒฐ๊ด๊ฐ’์€ 22,000์›์ด ๋ฉ๋‹ˆ๋‹ค.


๋ฐ˜๋ฉด์— * > + > - ๋กœ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•œ๋‹ค๋ฉด ์ˆ˜์‹์˜ ๊ฒฐ๊ด๊ฐ’์€ -60,420 ์ด์ง€๋งŒ, ๊ทœ์น™์— ๋”ฐ๋ผ ์šฐ์Šน ์‹œ ์ƒ๊ธˆ์€ ์ ˆ๋Œ“๊ฐ’์ธ 60,420์›์ด ๋ฉ๋‹ˆ๋‹ค.

 

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

 

[์ œํ•œ์‚ฌํ•ญ]

  • expression์€ ๊ธธ์ด๊ฐ€ 3 ์ด์ƒ 100 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • expression์€ ๊ณต๋ฐฑ๋ฌธ์ž, ๊ด„ํ˜ธ๋ฌธ์ž ์—†์ด ์˜ค๋กœ์ง€ ์ˆซ์ž์™€ 3๊ฐ€์ง€์˜ ์—ฐ์‚ฐ์ž(+, -, *) ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์˜ฌ๋ฐ”๋ฅธ ์ค‘์œ„ํ‘œ๊ธฐ๋ฒ•(์—ฐ์‚ฐ์˜ ๋‘ ๋Œ€์ƒ ์‚ฌ์ด์— ์—ฐ์‚ฐ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)์œผ๋กœ ํ‘œํ˜„๋œ ์—ฐ์‚ฐ์‹์ž…๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์—ฐ์‚ฐ์‹์€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ฆ‰, "402+-561*"์ฒ˜๋Ÿผ ์ž˜๋ชป๋œ ์ˆ˜์‹์€ ์˜ฌ๋ฐ”๋ฅธ ์ค‘์œ„ํ‘œ๊ธฐ๋ฒ•์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • expression์˜ ํ”ผ์—ฐ์‚ฐ์ž(operand)๋Š” 0 ์ด์ƒ 999 ์ดํ•˜์˜ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
    • ์ฆ‰, "100-2145*458+12"์ฒ˜๋Ÿผ 999๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ํฌํ•จ๋œ ์ˆ˜์‹์€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • "-56+100"์ฒ˜๋Ÿผ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์Œ์ˆ˜์ธ ์ˆ˜์‹๋„ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • expression์€ ์ ์–ด๋„ 1๊ฐœ ์ด์ƒ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋”๋ผ๋„, expression์˜ ์ค‘๊ฐ„ ๊ณ„์‚ฐ๊ฐ’๊ณผ ์ตœ์ข… ๊ฒฐ๊ด๊ฐ’์€ ์ ˆ๋Œ“๊ฐ’์ด 263 - 1 ์ดํ•˜๊ฐ€ ๋˜๋„๋ก ์ž…๋ ฅ์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋ผ๋ฆฌ๋Š” ์•ž์— ์žˆ๋Š” ๊ฒƒ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์Šต๋‹ˆ๋‹ค.

ํ’€์ด

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‘ ๊ฐœ์˜ ์†Œ๋ฌธ์ œ๋ฅผ ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

1. ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„์˜ ์กฐํ•ฉ์„ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ

2. ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ์‹์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ

 

๋”ฐ๋ผ์„œ ์กฐํ•ฉ๊ณผ ์™„์ „ํƒ์ƒ‰์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

์กฐํ•ฉ ์ฐพ๊ธฐ

๋จผ์ €, ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ†ตํ•ด ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. "+", "-", "*" ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ค‘๋ณต์—†๋Š” ์กฐํ•ฉ์„ ๋งŒ๋“ค๋ฉด ์ด 6๊ฐœ์˜ ์กฐํ•ฉ์„ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

func makeComb (operators: [String], priorityOp: [String], combinations: [[String]]) -> [[String]] {
    var combinations = combinations
    var priorityOp = priorityOp
    
    if priorityOp.count == operators.count {
        combinations.append(priorityOp)
        return combinations
    }
    
    for i in 0..<operators.count {
        if priorityOp.contains(operators[i]) { continue }
        priorityOp.append(operators[i])
        combinations = makeComb(operators: operators, priorityOp: priorityOp, combinations: combinations)
        priorityOp.removeLast()
    }
    return combinations
}

์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ 

์‹์„ ๋ฐฐ์—ด๋กœ ๋‚˜๋ˆ„๊ธฐ

์šฐ์„  ์ˆœ์œ„๋Œ€๋กœ ๊ณ„์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฌธ์ž์—ด์—์„œ ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๊ฐ๊ฐ ๋‚˜๋ˆ„์–ด์ค„ ํ•„์š”๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด expression ๋ฌธ์ž์—ด์„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๋‚˜๋ˆ ์„œ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. expression ๋ฌธ์ž์—ด์„ "+", "-", "*" ๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค. ์˜ˆ) "100*10-2+1" -> ["100", "10", "2", "1"]
  2. expression ๋ฌธ์ž์—ด์—์„œ ์—ฐ์‚ฐ์ž ๋ฌธ์ž๋“ค์˜ ์ˆœ์„œ๋ฅผ ๊ตฌํ•œ๋‹ค. ์˜ˆ) ["*", "-", "+"]
  3. ์ˆซ์ž๋งŒ ์žˆ๋˜ ๋ฐฐ์—ด์— ์—ฐ์‚ฐ๋“ค์„ ๋ผ์›Œ๋„ฃ๋Š”๋‹ค. ์˜ˆ) ["100", "*", "10", "-", "2", "+", "1"]

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ „์ฒด ์‹์„ ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ๋‚˜๋ˆ ์„œ ๋ฐฐ์—ด์— ๋‹ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

func separateExpression(expression: String) -> [String] {
    var operators = expression.filter({ ["+", "-", "*"].contains($0) }).map({ symbol in String(symbol) })
    var numbers = expression.components(separatedBy: ["+", "-", "*"])
    
    var i = 1
    while !operators.isEmpty {
        numbers.insert(operators.removeFirst(), at: i)
        i += 2
    }
    
    return numbers
}

์—ฐ์‚ฐ์ž ๋ฌธ์ž๋ฅผ ์‹ค์ œ ์—ฐ์‚ฐ์ž๋กœ ๋ฐ”๊พธ๊ธฐ

์Šค์œ„ํ”„ํŠธ์—์„œ ์—ฐ์‚ฌ์ž๋“ค์€ ํ•จ์ˆ˜์ด๊ณ  ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์—, ๊ฐ ๋ฌธ์ž์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

func stringToOperator(op: String) -> ((Int, Int)->Int) {
    switch op {
    case "+":
        return (+)
    case "-":
        return (-)
    default:
        return (*)
    }
}

์Šคํƒ์œผ๋กœ ์šฐ์„ ์ˆœ์œ„์— ๋งž๊ฒŒ ๊ณ„์‚ฐํ•˜๊ธฐ

์ด์ œ 1๋‹จ๊ณ„์—์„œ ๊ตฌํ•œ ์กฐํ•ฉ๊ณผ ๋งŒ๋“ค์–ด์ง„ ์‹ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ์„ ์‚ฌ์šฉํ•ด์„œ ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์—ฐ์‚ฐ์ž๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๋ฉด ์‹์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋นˆ ์Šคํƒ์„ ๋งŒ๋“ ๋‹ค.
  2. ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•ด์„œ ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์—ฐ์‚ฐ์ž๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  3. ํ˜„์žฌ ์‹์—์„œ ๊ฐ€์žฅ ์•ž ๋ฌธ์ž๋ฅผ popํ•œ๋‹ค.
  4. ๊บผ๋‚ธ ๋ฌธ์ž๊ฐ€ ์ˆซ์ž๋ผ๋ฉด ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.
  5. ์Šคํƒ์— ๊ฐ’์ด ๋“ค์–ด์žˆ๊ณ , ๊บผ๋‚ธ ๋ฌธ์ž๊ฐ€ ์—ฐ์‚ฐ์ž์ผ ๋•Œ,
    1. ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์—ฐ์‚ฐ์ž์™€ ์ผ์น˜ํ•œ๋‹ค๋ฉด :
      1. ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰ popํ•ด์„œ lhs๋กœ ๋งŒ๋“ ๋‹ค.
      2. ์‹์—์„œ ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ๋” pop ํ•ด์„œ rhs๋กœ ๋งŒ๋“ ๋‹ค. ์ž˜๋ชป๋œ ์—ฐ์‚ฐ์‹์€ ์ฃผ์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.
      3. lhs์™€ rhs์— ๋Œ€ํ•ด ๊บผ๋‚ธ ์—ฐ์‚ฐ์ž๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์„œ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.
    2. ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
      1. ์Šคํƒ์— ๊ทธ๋Œ€๋กœ ๋„ฃ๋Š”๋‹ค.
  6. ์Šคํƒ์— ์ €์žฅ๋œ ๊ฐ’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์—ฐ์‚ฐ์ž๋ฅผ ๊ณ„์‚ฐํ•œ ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์— ์žˆ๋Š” ์‹์„ ํ˜„์žฌ ์‹์œผ๋กœ ์น˜ํ™˜ํ•œ๋‹ค. 
  7. ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ๋‹ค ์‚ฌ์šฉํ•  ๋•Œ๊นŒ์ง€ 1 ~ 6๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

์œ„ ์ž‘์—…์„ ๊ตฌํ•œ ๋ชจ๋“  ์—ฐ์‚ฐ์ž ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฐ ์กฐํ•ฉ์˜ ์—ฐ์‚ฐ์ด ๋๋‚  ๋•Œ๋งˆ๋‹ค ์ ˆ๋Œ€๊ฐ’์œผ๋กœ ์ตœ๋Œ€๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

for combination in operatorCombinations {
        var currentExpression = separatedExpression
        var result = 0
        for op in combination {
            var stack: [String] = []
            while !currentExpression.isEmpty {
                var next = currentExpression.removeFirst()
                if !stack.isEmpty && op == next {
                    let lhs = Int(stack.removeLast())!
                    let rhs = Int(currentExpression.removeFirst())!
                    next = String(stringToOperator(op: op)(lhs, rhs))
                }
                stack.append(next)
            }
            currentExpression = stack
            result = Int(currentExpression.last!)!
        }
        answer = max(answer, abs(result))
    }

์ฝ”๋“œ