본문 바로가기
알고리즘 문제풀이

[Softeer] Yeah, but How? (Swift)

by SiO2whocode 2025. 2. 4.

https://softeer.ai/practice/9498

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

문자열

짝이 잘 맞는 괄호로만 구성된 문자열을 입력받아서 1과 +를 사이에 껴넣은 올바른 수식을 반환하는 문제

 

접근방법

가능한 수식이면 아무거나 된다고 해서 조건을 아래와 같이 설정했다

- 직전 문자가 "(" 일때, 다음 문자가 "("면 현재 문자열에 바로 추가, 반대로 다음 문자가 ")"면 "1)"을 현재 문자열에 추가

(이러면 결론적으로 (( 혹은 (1) 이 된다)

- 직전 문자가 ")"일때, 다음 문자가 "("면 현재 문자열에 "+("를 추가, 반대로 다음 문자가 ")"면 ")"만 현재 문자열에 추가

(이러면 "))"혹은 ")+" 이런 모양이 된다)

모든 예외 케이스를 고려했는지 확신은 부족한데 생각나는 케이스들에는 다 잘 돌아가는 것 같았다. 제출했더니 통과됨

 

오답노트

Swif로 문자열 자르고 인덱싱하는게 여전히 어렵고 익숙하지 않아서 좀 여러번 찾아보고 고쳤다.

인덱싱은 forEach문으로 해결했고, 문자열 자르는건 prefix, suffix 메서드써서 했다

 

소스코드

var input:String = readLine()!
var result:String = String(input.prefix(1))

var curr:String = String(input.prefix(1))
input = String(input.suffix(input.count-1))

input.forEach { s in 
    if curr == "(" {
        if s == "(" {
            result += "("
        } else {
            result += "1)"
        }
    } else {
        if s == ")" {
            result += ")"
        } else {
            result += "+("
        }
    }
    curr = String(s)
}

print(result)
728x90