2020 μΉ΄μΉ΄μ€ μΈν΄μ½ μμ μ΅λν Swift
λ¬Έμ μ€λͺ
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 μ΄νκ° λλλ‘ μ λ ₯μ΄ μ£Όμ΄μ§λλ€.
- κ°μ μ°μ°μλΌλ¦¬λ μμ μλ κ²μ μ°μ μμκ° λ λμ΅λλ€.
μ μΆλ ₯ μ
expression | result |
"50*6-3*2" | 300 |
"100-200*300-500+20" | 60420 |
Fomaμ νμ΄
1. μ°μ°μμ κ°―μλ₯Ό μμλ΄μ΄ μ°μ μμμ‘°ν©μ λ§λ€μ΄λΌμ μλλ
2 .μμ ν¬ν¨λ μ«μμ μ°μ°μλ₯Ό κ°κ° λΆλ¦¬ν΄λΌ μ μλλ
3. μ°μ μμμ‘°ν©λλ‘ κ° μμ μ°μ°μμ μμΉλ₯Ό μμλ΄μ΄ μμΉμ λ§λ μ«μλ€μ μ°μ°νκ³ μμ μ¬μ 립ν μ μλκ°
4. μ°μ μμμ‘°ν©λλ‘ μ°μ°ν μμ μ λκ° μ€ κ°μ₯ μ΅λκ°μ λ°νν μ μλκ°
μ κ° μκ°ν ν΅μ¬μ μ΄λ κ² 4κ°μ§μ λλ€.
μμΈν νμ΄λ μλμ μ€λͺ νκ² μ΅λλ€.
expressionμμ κ° μ°μ°μμ μμΉλ₯Ό λ΄μμ€ λ°°μ΄λ€μ λ§λ€μ΄μ€λ€. => var minus = [Int]() var multiple = [Int]() var plus = [Int]()
λ°λ μμ λ΄μ λ°°μ΄μ λ§λ€μ΄μ€λ€. => var numbers = [String]()
whileλ¬Έμ νμν μ«μλ₯Ό μ μ₯ν λ³μλ₯Ό λ§λ€μ΄μ€λ€. => var j = Int()
(λ€λ₯Έ ν¨μκ° μκΈ° λλ¬Έμ λ°λμ μμ λ³μλ€μ solutionν¨μ λ°μλ€κ° λ§λ€μ΄μ€λ€.)
κ·Έλ¦¬κ³ μ°μ°μμ μ°μ μμ μ‘°ν©λ€μ λ΄μ 2μ°¨μ λ°°μ΄μ λ§λ€μ΄μ€λ€. => var order = [[String]]()
μ°μ μμμ‘°ν©λλ‘ μ°μ°νμ λμ κ°λ€μ μ μ₯ν λ°°μ΄μ λ§λ€μ΄μ€λ€. = > var sums = [Int64]()
μ°μ°μ λ°°μ΄μ λ£μ μ§ν©μ λ§λ€μ΄μ€λ€.(μ§ν©μΌλ‘ λ§λλ μ΄μ λ μ€λ³΅μ μμ μ£Όμ΄μ§ μ°μ°μμ κ°―μλ₯Ό μμλ΄μΌλκΈ° λλ¬Έμ΄λ€.) => var oper = Set<String>()
exprssionμ νν°λ‘ μ°μ°μμΌλλ‘ κ±Έλ¬μ£Όκ³ λ§΅μΌλ‘ λ°°μ΄λ‘ λ§λ€μ΄μ€ ν¬ν¨λμ΄ μλ μ°μ°μλ€μ λ΄μμ€λ€.
=> var operArray = expression.filter({$0 == "+" || $0 == "-" || $0 == "*"}).map{String($0)} ex) "50+3-10*6+9"μ΄λΌλ©΄ opreArrayλ ["+",-","*","+"]
formUnionμ μ¬μ©ν΄ μ§ν©μ μμ μ°μ°μλ€μ λ΄μ λ°°μ΄μ λ£μ΄μ€ μ€λ³΅μ μμ μ€λ€.
=> oper.formUnion(operArray)
μ°μ μμμ‘°ν©μ λ§λ€κΈ°μν΄μ μ§ν©μ μΈλ±μ€λ₯Ό μ¬μ©ν΄μΌνλ―λ‘ μ§ν©μ λ°°μ΄λ‘ λ°κΏμ€λ€.(μ§ν©μ μΈλ±μ€λ₯Ό μ¬μ©ν΄λ λμ§λ§ λ°°μ΄μ΄ νΈν΄μ λ°°μ΄λ‘ λ°κΏμ€) => let operSetArray = Array(oper)
μ°μ°μ κ°μκ° 1κ°μμ μ΅λ 3κ°μ΄λ―λ‘ κ°κ°μ κ²½μ°μ μλ 1!,2!,3!μ΄λ―λ‘ μΌλ§λμ§ μμμ μ§μ orderμ μ‘°ν©μ λ§λ€μ΄μ λ£μ΄μ€¬μ΅λλ€.
=> if oper.count == 1 {
order.append([operSetArray[0]]) => ex) ["+"] or ["-"] or ["*"]
} else if oper.count == 2 {
λ§μ½ +,-μΌκ²½μ°
order = [[operSetArray[0],operSetArray[1]],[operSetArray[1],operSetArray[0]]] => ex) ["+","-"],["-",+"]
}else{
order = [[operSetArray[0],operSetArray[1],operSetArray[2]],[operSetArray[0],operSetArray[2],operSetArray[1]],[operSetArray[1],operSetArray[0],operSetArray[2]],[operSetArray[1],operSetArray[2],operSetArray[0]],[operSetArray[2],operSetArray[1],operSetArray[0]],[operSetArray[2],operSetArray[0],operSetArray[1]]]
=> ex) ["+","-","*"],["+","*","-"].....
}
κ·Έ λ€μμΌλ‘ forλ¬Έμ μ¬μ©νμ¬ orderμ μλ μ‘°ν©λ€μ μ°¨λ‘λ‘ λλ €μ€λλ€.
=> for c in order {...}
expressionμ μ°μ°μλ₯Ό κΈ°μ€μΌλ‘ λΆλ¦¬ν΄μ μ«μλ€λ§ λ°λ‘ numbersμ λ΄μμ€λλ€.
=> numbers = expression.components(separatedBy: CharacterSet(charactersIn: "*-+")) ex)"50+3-10" μ΄λΌλ©΄ number = ["50"],["3"],["10"]
expressionμμ μ°μ°μλ€λ§ λͺ¨μ λ°°μ΄κ°μ λ£μ΄μ€λλ€.. (λ€μ operArrayκ° μμ λκΈ° λλ¬Έμ λ°λμ λ€μ κ°μ λ£μ΄μ€μΌν©λλ€..)
operArray = expression.filter({$0 == "+" || $0 == "-" || $0 == "*"}).map{String($0)}
whileλ¬Έμ λ§λ€μ΄μ numbersμ μ«μ λ°°μ΄κ³Ό expressionμ μ°μ°μ λ°°μ΄μ μ°¨λ‘λ‘ μμ΄ μ€μ μμμ μ«μμ μ°μ°μλ₯Ό λΆλ¦¬ν λ°°μ΄μ λ§λ€μ΄μ€λλ€. (forλ¬Έμ μ¬μ©νμ¬ λ°°μ΄μ λ§λ€μμ λ§μ½ "50+3"μ΄λΌλ©΄ μ«μ 50μ ꡬλΆνκΈ° νλ€μ΄μ μ΄λ κ² μμ΄μ λ§λ€μ΄μ£Όμμ΅λλ€.)
ex) 50 + 3 - 6 + 8 * 7μ΄λΌλ©΄ numbersλ ["50", "+" ."3", "-", "6", "+", "8","*",'7"]
var x = 1
while x < numbers.count{
numbers.insert(operArray.first!, at: x)
그리곀 minus,plus,multipleμ κ°κ° ν΄λΉ μΈλ±μ€λ₯Ό λ£μ΄μ€λλ€. ex) numbersκ° ["50", "+" ."3", "-", "6", "+", "8","*",'7"] μ΄λΌλ©΄ plus = [1,5] minus = [3] mutiple = [7]
if operArray.first! == "-"{
minus.append(x)
}else if operArray.first! == "+"{
plus.append(x)
}else {
multiple.append(x)
}
operArray.removeFirst()
x += 2
}
whileλ¬Έμ μ¬μ©νμ¬ detectMMPλΌλ μ°μ°μλ₯Ό ꡬλΆνλ ν¨μλ₯Ό μ€νμμΌμ€λλ€.
μμν λ λ§λ€μ΄λμ jλ₯Ό 0μΌλ‘ λ§λ€μ΄μ€λλ€ => j = 0
while j < c.count {
detectMMP(c.map({$0})[j]) cλ orderμμ κ° mapνν΄μ£Όκ³ μ°¨λ‘λ‘ κΊΌλ΄μ€λλ€. ex)"+","-","*"
}
그리곀 detectMMPλ₯Ό μ΄ν΄λ³΄λ©΄ μΈμκ°μΌλ‘ orderμ μ°μ°μλ₯Ό μ°¨λ‘λ‘ λ°κ²λ©λλ€.
func detectMMP(_ oper:String){
plus,minus,multipleλ°°μ΄μ κ°μ μ μ₯ν λ³μλ₯Ό λ§λ€μ΄μ€ => var mmpCopy = [Int]()
κ·Έλ¦¬κ³ μ°¨λ‘λ‘ "+","-","*"μΌ κ²½μ°μ numbersμ κ° λ°°μ΄μ ν΄λΉμΈλ±μ€ μ리μ - 1κ°κ³Ό ν΄λΉμΈλ±μ€μ +1 κ°μ μ°μ°μμ λ§κ² μ°μ°ν΄μ€λλ€.
numbersκ° ["50", "+" ."3", "-", "6", "+", "8","*",'7"] μ΄κ³ "+"μΌ κ²½μ°μ plusλ κ°μ₯ 첫λ²μ§Έ μΈλ±μ€κ° 1μ΄λ―λ‘ numbersμ -1μ리λ 0μ΄κ³ +1 μ리λ 2μ΄λ―λ‘ κ°κ° 50 + 3μ΄λκ³ numbers[0]μ κ°μ 53μΌλ‘ λ³νκ³ μ 체λ ["53", "+" ."3", "-", "6", "+", "8","*",'7"]μ΄ λ©λλ€.
=> if oper == "+" {
mmpCopy = plus
numbers[plus.first! - 1] = "\(Int(numbers[plus.first! - 1])! + Int(numbers[plus.first! + 1])!)"
κ·Έλ¦¬κ³ plusμ 첫λ²μ§Έ κ°μ μμ ν΄μ£Όκ³
=> plus.removeFirst()
λ§μ½ plusκ° ν κ°κ° μλμμ jκ°μ λν΄μ£Όμ§μμ λ€μ whileλ¬Έμμ "+"κ° μ€λλ‘ν©λλ€.
if plus.isEmpty {
j += 1
}
κ·Έλ¦¬κ³ numbersμμ ν΄λΉ μΈλ±μ€μ μ°μ°μμ λ€μ λν΄μ€ κ°μ μμ μμΌμ€λλ€.
ex) ["53", "+" ."3", "-", "6", "+", "8","*",'7"] -> ["53", "-", "6", "+", "8","*",'7"]
numbers.remove(at: mmpCopy.first!)
numbers.remove(at: mmpCopy.first!)
κ·Έλ¦¬κ³ numbersμμ μ°μ°μμ λν΄μ€ κ°μ΄ μ΄ 2κ°κ° μμ΄μ§λ―λ‘ κ·Έ λ€μ μλ€μ μΈλ±μ€λ₯Ό -2λ₯Ό ν΄μ€λλ€.
ex) numbers = ["53", "+" ."3", "-", "6", "+", "8","*",'7"] λΌλ©΄ λ€μ "+'μ "3"μ΄ μμ΄μ§λ―λ‘ ["53", "-", "6", "+", "8","*",'7"]
minus = [3]μμ -> miuns [1]μΌλ‘ mutiple = [7]μμ multiple [5]λ‘ λ°λκ² λ©λλ€.
plus = plus.filter{$0 <= mmpCopy.first!}.map{$0} + plus.filter{$0 > mmpCopy.first!}.map{$0-2}
κ·Έ λ€μ λ€μ solutionμΌλ‘ λμκ°μ numbersμ νλλ¨μ κ°μ μ λκ°μΌλ‘ λ³νμ sumsμ λ£μ΄μ€λλ€.(μ λκ°μΌλ‘ λ³ννκΈ° μν΄μ Int64νμΌλ‘ λ°κΏμ€μΌν¨) => sums.append(abs(Int64(numbers.first!)!))
λ§μ§λ§μΌλ‘ μ΄λ κ² μΆκ°λ sumsμμ κ°μ₯ ν° κ°μ λ°νν΄μ€λλ€. => return sums.max()!
μ 체μ½λ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
import Foundation
//- μ°μ°μμ indexλ₯Ό λ΄μ λ°°μ΄
var minus = [Int]()
//* μ°μ°μμ indexλ₯Ό λ΄μ λ°°μ΄
var multiple = [Int]()
//+ μ°μ°μμ indexλ₯Ό λ΄μ λ°°μ΄
var plus = [Int]()
//μμ λ΄μ λ°°μ΄
var numbers = [String]()
//whileλ¬Έμ νμν μ«μ
var j = Int()
func solution(_ expression:String) -> Int64 {
//μ°μ°μ μ°μ μμ μ‘°ν©λ€μ λ΄μ 2μ°¨μλ°°μ΄
var order = [[String]]()
//κ° μ°μ μμ μ°μ°νμλ λ£μ΄μ€ κ°
var sums = [Int64]()
//μ°μ°μ λ°°μ΄μ λ£μ μ§ν©
var oper = Set<String>()
//exprssionμ ν¬ν¨λμ΄ μλ μ°μ°μ λ°°μ΄
var operArray = expression.filter({$0 == "+" || $0 == "-" || $0 == "*"}).map{String($0)}
//Set operμ mmpλ₯Ό λ£μ΄μ€μ μ€λ³΅μ μμ€λ€
oper.formUnion(operArray)
//μ°μ μμμ‘°ν©μ λ§λ€κΈ° μν΄ Setλ₯Ό λ°°μ΄λ‘ λ§λ€μ΄μ€
let operSetArray = Array(oper)
//μ°μ°μ κ°―μλ§νΌ μ°μ μμ μ‘°ν©
if oper.count == 1 {
order.append([operSetArray[0]])
} else if oper.count == 2 {
order = [[operSetArray[0],operSetArray[1]],[operSetArray[1],operSetArray[0]]]
}else{
order = [[operSetArray[0],operSetArray[1],operSetArray[2]],[operSetArray[0],operSetArray[2],operSetArray[1]],[operSetArray[1],operSetArray[0],operSetArray[2]],[operSetArray[1],operSetArray[2],operSetArray[0]],[operSetArray[2],operSetArray[1],operSetArray[0]],[operSetArray[2],operSetArray[0],operSetArray[1]]]
}
//μ°μ μμμ‘°ν©μ μμλλ‘ κΊΌλΌ forλ¬Έ
for c in order {
//μ°μ°μλ₯Ό κΈ°μ€μΌλ‘ μ«μλ€μ λλ μ λ΄μμ€λ€.
numbers = expression.components(separatedBy: CharacterSet(charactersIn: "*-+"))
//μ°μ°μλ€λ§ μλ λ°°μ΄μ λ€μ 볡ꡬ
operArray = expression.filter({$0 == "+" || $0 == "-" || $0 == "*"}).map{String($0)}
var x = 1
//μ«μλ€κ³Ό μ°μ°μλ€μ κ° μμΉμ λ§κ² λ°°μ΄λ‘ λ§λ€μ΄μ€λ€.
while x < numbers.count{
numbers.insert(operArray.first!, at: x)
if operArray.first! == "-"{
minus.append(x)
}else if operArray.first! == "+"{
plus.append(x)
}else {
multiple.append(x)
}
operArray.removeFirst()
x += 2
}
j = 0
//jκ° μ°μ°μμ κ°―μλ³΄λ€ μ λ€λ©΄μ 쑰건μΌλ‘ whileλ¬Έμ λλ¦Ό
while j < c.count {
//detectMMPμ +,-,* μΈμ§ λ£μ΄μ€
detectMMP(c.map({$0})[j])
}
//λ§μ§λ§μΌλ‘ λ¨μ numbersμ μ λκ°μ κ°μ μ μ₯νλ sumsμ λ£μ΄μ€
sums.append(abs(Int64(numbers.first!)!))
}
//sumsμ μλ μ μΌ ν° μλ₯Ό returnν΄μ€λ€.
return sums.max()!
}
func detectMMP(_ oper:String){
var mmpCopy = [Int]()
//λ§μ½ μ°μ μμμ‘°ν©μ€ μ°¨λ‘λ‘ μ°μ°μλ₯Ό μμλ΄κ³ plusλ°°μ΄μμ κ°μ₯ 첫λ²μ§Έ μΈλ±μ€λ₯Ό μ°Ύκ³ numbersμμ κ·Έ κΈ°νΈ μ λ€μ μ«μλ€μ κ° μ°μ°κΈ°νΈμ λ§κ² ν΄μ€λ€.
if oper == "+" {
mmpCopy = plus
numbers[plus.first! - 1] = "\(Int(numbers[plus.first! - 1])! + Int(numbers[plus.first! + 1])!)"
//μ°μ°μ΄ λλλ©΄ ν΄λΉ μ°μ°μλ₯Ό λ΄λ λ°°μ΄μ 첫λ²μ§Έ μΈλ±μ€λ₯Ό μμ ν΄μ€λ€.
plus.removeFirst()
//λ§μ½ μ°μ°κΈ°νΈκ° μ¬λ¬κ°μΌλ jλ₯Ό κ·Έλλ‘ μ μ§ν΄ λ€μ κ·Έ μ°μ°μλ‘ λλμμ€κ²νλ€.
if plus.isEmpty {
j += 1
}
}else if oper == "-" {
mmpCopy = minus
numbers[minus.first! - 1] = "\(Int(numbers[minus.first! - 1])! - Int(numbers[minus.first! + 1])!)"
minus.removeFirst()
if minus.isEmpty {
j += 1
}
}else if oper == "*"{
mmpCopy = multiple
numbers[multiple.first! - 1] = "\(Int(numbers[multiple.first! - 1])! * Int(numbers[multiple.first! + 1])!)"
multiple.removeFirst()
if multiple.isEmpty {
j += 1
}
}
//μμμ μμ ν΄μ€ μ°μ°μμ μμΉλ₯Ό μμ ν΄μ€λ€. νλ² λ ν΄μ£Όλ μ΄μ λ λ μ«μλ₯Ό μ°μ°νλ©΄ μ°μ°μ λ€μ μ«μκ° μλμΌλ‘ μμ΄μ§κΈ° λλ¬Έμ΄λ€. //κ·Έ λ€μ κ° μ°μ°μμ μΈλ±μ€ μ€ μ μ μμ λ μΈλ±μ€λ³΄λ€ ν° κ°μ΄λΌλ©΄ -2λ₯Ό ν΄μ€λ€. μλνλ©΄ μ°μ°μμ λ μ«μκ° μ°μ°λμ΄ νλμ μ«μκ° λλ―λ‘ 2κ°μ κ°μ΄ μμ λλ€.
plus = plus.filter{$0 <= mmpCopy.first!}.map{$0} + plus.filter{$0 > mmpCopy.first!}.map{$0-2}
multiple = multiple.filter{$0 <= mmpCopy.first!}.map{$0} + multiple.filter{$0 > mmpCopy.first!}.map{$0-2}
minus = minus.filter{$0 <= mmpCopy.first!}.map{$0} + minus.filter{$0 > mmpCopy.first!}.map{$0-2}
}
|
cs |
μλ‘κ² μκ² λκ²λ€
Setμ λ°°μ΄ μ 체λ₯Ό λ£κΈ°μν΄μ Set.formUnion(Array)
Stringμμ μ¬λ¬κ°μ separatorλ₯Ό μ¬μ©νλ €λ©΄ String.components(separatedBy: CharacterSet(charactersIn: "μνλκ²λ€"))
μ λκ°μ μμλ΄κΈ° μν΄μ abs(Int64(Number))