반응형
문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
- s는 길이 1 이상, 길이 8 이하인 문자열입니다.
내가 제출한 코드 : 최대 0.06ms
func solution(_ s:String) -> Bool {
let c = s.count
if c == 4 || c == 6 {
return c == (s.filter{$0.isNumber}).count
} else {
return false
}
}
filter를 사용하여 문자열에서 숫자만 가져와 비교하는 방법으로 구현했는데 다른 제출 코드를 살펴보니 더 간단한 방법이 있더라.
애초에 String을 Int 형식으로 바꿔주면, 숫자가 아닌 문자가 들어있는 경우 결과값은 nil이 된다는 사실!!
최대 : 0.03ms
func solution(_ s:String) -> Bool {
return (Int(s) != nil && (s.count == 4 || s.count == 6)) ? true : false
}
빠르긴 이게 제일 빠른듯. 최대 : 0.03ms, 대부분 0.02ms
무조건 짧게 적는다고 좋은건 아닌가봉가?
func solution(_ s:String) -> Bool {
if s.count == 4 || s.count == 6 {
return Int(s) != nil
}
return false
}
문자열이 숫자로만 이루어져있는지 아닌지 판별하는 것이 관건.
방법 1) s.count == (s.filter{$0.isNumber}).count
filter를 이용하여 문자열 내에 숫자만 뽑아, 문자열 길이를 비교
방법 2) Int(s) != nil
문자열을 Int 형식으로 바꿔주면, 숫자가 아닌 문자가 들어있는 경우 결과값은 nil
+ 제출한 코드랑 큰 차이 없는데 이렇게 써줬더니 실행시간 초과떴다. 그냥 실행할 때 마다 조금씩 다른건가? 모르겠다.
func solution(_ s:String) -> Bool {
if s.count == 4 || s.count == 6 {
return s.count == (s.filter{$0.isNumber}).count ? true : false
} else {
return false
}
}
728x90
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Swift 문자열] Programmers 핸드폰 번호 가리기 (0) | 2022.01.07 |
---|---|
[Swift 알고리즘] Programmers 제일 작은 수 제거하기 (0) | 2022.01.05 |
[Swift 알고리즘] Programmers 기초 문제들 (0) | 2022.01.04 |
[Swift 알고리즘] Programmers 가운데 글자 가져오기 (0) | 2021.04.09 |
[Swift 알고리즘] Programmers 두 정수 사이의 합 (0) | 2021.04.08 |