💬 문제
[1차] 뉴스 클러스터링
💬 Idea
- 2개를 기준으로 문자열을 슬라이싱하며 정규표현식과 일치하지 않는 문자열은 건너띄고, 일치하는 문자열을 저장하여 반환한다.
- set으로 key값을 생성하여 key값을 돌면서 교집합과 합집합의 개수를 구한다.
💬 풀이
func solution(str1:String, str2:String)->Int{letstr1MultipleArr:[String]=sliceArr(Array(str1).map{String($0)},"^[a-z]+$")letstr2MultipleArr:[String]=sliceArr(Array(str2).map{String($0)},"^[a-z]+$")letkey=Set(str1MultipleArr + str2MultipleArr)varintersection:[String]=[]varunion:[String]=[]forkin key {lets1= str1MultipleArr.filter{ $0 == k }.count
lets2= str2MultipleArr.filter{ $0 == k }.count
// 교
if s1 !=0 && s2 !=0{for_in0..<min(s1, s2){
intersection.append(k)}}
// 합
for_in0..<max(s1, s2){
union.append(k)}}if intersection.count ==0 && union.count ==0{return65536}else{returnInt((Double(intersection.count)/ Double(union.count)*65536))}}func sliceArr(_ str:[String], _ regex:String)->[String]{vararr:[String]=[]foriin0..<str.count -1{lets=str[i...i +1].map{String($0)}.joined().lowercased()if !s.allSatisfy({ $0.isLetter }){continue}if s.range(of: regex, options:.regularExpression)==nil{continue}
arr.append(s)}return arr
}💬 더 나은 방법?
s.allSatisfy({ $0.isLetter })- 정규표현식을 사용하지 않고도 풀 수 있는 방법!
- 분명 아는 문법이었는데 왜 풀때는 생각나지 않았는지.. ㅠ 반성해야겠다 !
💬 알게된 문법
func getArrayAfterRegex(regex:String)->[String]{do{letregex=tryNSRegularExpression(pattern: regex)letresults= regex.matches(in:self,
range:NSRange(self.startIndex..., in:self))return results.map{String(self[Range($0.range, in:self)!])}}catchlet error{print("invalid regex: \(error.localizedDescription)")return[]}}[[Swift] Swift에서 정규표현식(Regular Expression)을 이용하기](https://eunjin3786.tistory.com/12)
- 소수점 이하 나누는 방법 잊지 말 것…
- Double(num1) / Double(num2)
💬 문제[1차] 뉴스 클러스터링
💬 Idea💬 풀이💬 더 나은 방법?💬 알게된 문법[[Swift] Swift에서 정규표현식(Regular Expression)을 이용하기](https://eunjin3786.tistory.com/12)