Skip to content

[Algorithm] [1차] 뉴스 클러스터링 #114

Description

@hwangJi-dev

💬 문제

[1차] 뉴스 클러스터링


💬 Idea

  1. 2개를 기준으로 문자열을 슬라이싱하며 정규표현식과 일치하지 않는 문자열은 건너띄고, 일치하는 문자열을 저장하여 반환한다.
  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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions