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

이창형·2023년 3월 31일
0

문제 링크

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

코드

import Foundation

func solution(_ str1:String, _ str2:String) -> Int {
	// String을 Array로 바꾸는 작업
    let array1 = Array(str1)
    let array2 = Array(str2)
    
    // 2개씩 끊어서 저장할 Array
    var newArray1 = [String]()
    var newArray2 = [String]()
    
    for i in 0..<str1.count - 1{
    	// 문자가 아닐시 저장x
        if array1[i].isLetter && array1[i+1].isLetter {
            newArray1.append("\(array1[i].uppercased())\(array1[i+1].uppercased())")
        }
    }
    
    for i in 0..<str2.count - 1{
    	// 문자가 아닐시 저장x
        if array2[i].isLetter && array2[i+1].isLetter {
            newArray2.append("\(array2[i].uppercased())\(array2[i+1].uppercased())")
        }
    }
    
    // Array 두개를 합쳐서 교집합을 빼면 합집합
    var sumArray = newArray1 + newArray2
    // 교집합의 수
    var intersectionCount = 0
    
    // indices는 안전하게 배열을 조회할 수 있게 도와준다
    // 범위를 벗어나지 않도록
    for i in newArray1.indices {
        for j in newArray2.indices {
            if newArray1[i] == newArray2[j] {
                intersectionCount += 1
                newArray2.remove(at: j)
                break
            }
        }
    }
    
    // 합집합의 수
    var unionCount = sumArray.count - intersectionCount
        
    // 두 집합이 공집할일때
    if sumArray.count == 0{ 
            return 65536
        }
        // 교집합이 없을때 
        else if intersectionCount == 0{
            return 0
        }
        else{
            return Int(Double(intersectionCount)/Double(unionCount) * 65536)
        }
}

회고

  • isLetter, indices를 알게되었다
  • 처음에 isLetter을 몰라서 하나하나 골라서 특수문자를 빼주었더니 시간초과로 실행되지가 않았다
  • 심화문법을 조금씩 알게되어 좋다
profile
iOS Developer

0개의 댓글