포스트

196. 문자열 다루기 기본


1
2
3
4
5
6
7
8
func solution(_ s:String) -> Bool {
    
    var answer : Bool = true
    
    answer =  s.count == 4 || s.count == 6 ? (s.map{$0.isNumber}.contains(false) ? false : true) : false 
    
    return answer
}

정수인지 아닌지를 판단하는 isNumber 메서드를 이용하여 풀었다. 하지만 처음에는 단순히 변환만 하고 filter를 사용하여 false만 걸러내려고 했는데, 오답이 많이 나와서 이유를 생각해보니, 문자가 여러개 있을때는 filter 를 하게되면 false가 여러개 나와서 [false] 하나로 보기엔 논리적으로 오류가 있었다.

그래서 map과 isNumber를 함께 사용하여 true, false를 함께 나타내는 배열에서 false의 갯수와 상관없이 하나라도 포함을 하면 되는것이라고 생각하여 contains를 사용하였다.

그리고나서 바로 돌려본 결과 오답이 줄긴했지만 완전한 정답이 아니어서 조건을 다시보니 s.count = 4 와 6일때만 해당 조건식이 성립이 되고 나머지는 false가 되어야 한다고 생각해서 추가로 조건을 더하여 풀었다.

처음에는 단순히 s.isNumber로 하려고했는데 에러가 나서 map으로 하게되었다.

다른 코드들을 보니 그냥 s를 Int로 감쌌을때 nil인지 아닌지를 이용하여 풀었다.

너무 복잡하게 생각을 했던것같다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.