"3 + 7" 형태로 들어온 문자열을 해석하여 결과를 리턴하는 과제였다.
func solution(_ my_string:String) -> Int {
var temp = my_string.split(separator:" ").joined()
temp.append(" ")
var result = 0
var tempv = 0
var n = 1
for val in temp
{
if (nil != val.wholeNumberValue)
{
tempv = tempv * 10 + val.wholeNumberValue!
}
else
{
result = n == 1 ? result + tempv : result - tempv
tempv = 0
n = val == "+" ? 1 : 0
}
}
return result
}
나는 숫자 String을 Int로 변환한 뒤 기호를 만났을 때 이전 기호에 따라 더하거나 빼주면 문제가 해결된다고 인지했다.
공백으로 구분되어있기에 일단 split으로 공백을 없앤 후 joined를 이용하여 다시 String의 형태로 만들어주었다.
나는 Character단위로 해석했기에 10을 곱해가며 값을 더해줄 임시 변수 tempv를 만들었고 기호를 만나기 전까지의 값을 임시로 저장해주었다.
기호를 만나면 +-를 저장해놓은 n을 확인하여 result에 여태까지의 값인 tempv를 더하거나 뺀 후 값을 초기화시켰다.
그 후 다음에 기호를 만났을때 활용할 n값을 다시 결정해주었다.
Character의 메서드 중 하나로 정수일경우 그 Int형을 반환하고 정수가 아닐경우 nil을 반환한다. 옵셔널 타입을 리턴하므로 !로 언래핑하여 사용할 수 있다.
대충 정리하면서 보이는것들