본문 바로가기
알고리즘

[Swift] 프로그래머스 - 카카오 뉴스 클러스터링

by 고고 2022. 2. 10.

문제: https://programmers.co.kr/learn/courses/30/lessons/17677

 

코딩테스트 연습 - [1차] 뉴스 클러스터링

뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브

programmers.co.kr

 

1. 대소문자 똑같댔으니 소문자로 전부 바꿔주기

2. 특수기호 유무 판별

3. 교집합 합집합 계산

4. J(0, 0) 예외처리

import Foundation

func solution(_ str1:String, _ str2:String) -> Int {
    let str1 = Array(str1.lowercased())
    let str2 = Array(str2.lowercased())
    
    let letters = "abcdefghijklmnopqrstuvwxyz"
    var A = [String]()
    var B = [String]()
    
    for i in 0..<str1.count - 1 {
        if letters.contains(str1[i]) && letters.contains(str1[i + 1]) {
            let str = String(str1[i...i + 1])
            A.append(str)
        }
    }
    
    for i in 0..<str2.count - 1 {
        if letters.contains(str2[i]) && letters.contains(str2[i + 1]) {
            let str = String(str2[i...i + 1])
            B.append(str)
        }
    }
    
    var intersect = 0
    var union = 0
    
    let s = Set(A + B)
    
    for str in s {
        let aCount = A.filter { $0 == str }.count
        let bCount = B.filter { $0 == str }.count
        intersect += min(aCount, bCount)
        union += max(aCount, bCount)
    }
    
    if intersect == 0 && union == 0 {
        return 1 * 65536
    }
    
    return Int(Double(intersect) / Double(union) * 65536)
}

solution("FRANCE", "french") // 16384
solution("handshake", "shake hands") // 65536
solution("aa1+aa2", "AAAA12") // 43690
solution("E=M*C^2", "e=m*c^2") // 65536

댓글