일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- OSI
- 파일 시스템
- windosws wbcs
- c언어
- HTML
- War Game
- PHP
- 시간복잡도
- web
- 미로 탐색 알고리즘
- 파이썬
- System
- 재귀
- 스택
- Java
- LoB
- ftz level13
- SWiFT
- 두근두근 자료구조
- pwnable.kr
- 정렬 알고리즘
- windosw 문자열
- Stack
- ftz
- 백준
- C
- level13
- 큐
- 암호수학
- 자료구조
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 프로그래머스 코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT [1차] 뉴스 클러스터링 본문
Programming/Algorithm & Data Structure
[Swift] 프로그래머스 코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT [1차] 뉴스 클러스터링
guswlsdk 2022. 8. 23. 11:53반응형
<문제풀이>
- 분리하기 - str1과 str2 두글자씩 분리하기
- 대문자 또는 소문자 변환, 공백, 숫자, 특수문자, 두글자로 분해
- 분리된 str1과 str2으로 Set를 만들어 중복 없는 집합을 만듦
- 분리된 집합의 각 요소마다 str1, str2에 포함된 갯수를 구함
- 두 집합(str1, str2)에 포함된 갯수가 같을 경우, 다를 경우 교집합과 합집합에 추가할 요소가 다르게 구현
- 갯수가 같을 경우 교집합, 합집합에 갯수만큼 추가
- 갯수가 다를 경우 각 집합의 포함된 갯수의 최솟값 만큼은 교집합, 최대값 만큼 합집합에 추가
- 교집합 합집합이 모두 0일 때, 교집합은 0인데 합집합은 0이 아닐 떄, 그 이외 총 세가지의 경우에 대해서 리턴할 수 있도록 함
<코드>
func solution(_ str1:String, _ str2:String) -> Int {
let str1 = str1.map{String($0.uppercased())}
let str2 = str2.map{String($0.uppercased())}
func makeSet(str: [String]) -> [String]{
var d = [String]()
for i in 0..<str.count-1{
let temp = str[i] + str[i+1]
if temp.range(of: "^[A-Z]{2,}", options: .regularExpression) != nil{
d.append(temp)
}
}
return d
}
func findCount(d: [String], w: String) -> Int{
var count = 0
for i in d{
if i == w{
count += 1
}
}
return count
}
func compare(){
for w in Set(d1+d2){
// print(w)
// d1, d2에 w가 몇 개 있는지
let d1Count = findCount(d: d1, w: w)
let d2Count = findCount(d: d2, w: w)
// print(d1Count, d2Count)
// 다중 집합일 때
// 다중 집합 아닐 때
if d1Count == d2Count {
for _ in 0..<d1Count{
// print("d1==d2\(w)")
intersec.append(w)
union.append(w)
}
}else if d1Count > d2Count{
for _ in 0..<d2Count{
intersec.append(w)
}
for _ in 0..<d1Count{
union.append(w)
}
}else if d1Count < d2Count{
for _ in 0..<d2Count{
union.append(w)
}
for _ in 0..<d1Count{
intersec.append(w)
}
}
}
}
let d1 = makeSet(str: str1)
let d2 = makeSet(str: str2)
var intersec = [String]()
var union = [String]()
compare()
// print(intersec, union)
if intersec.count == 0 && union.count == 0{
return 65536
}else if intersec.count == 0 && union.count != 0{
return 0
}else{
// print(Double(intersec.count)/Double(union.count))
return Int(Double(intersec.count)/Double(union.count) * 65536)
}
}
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] 프로그래머스 코딩테스트 연습> 연습문제> 푸드 파이트 대회 (0) | 2023.01.04 |
---|---|
[Swift] 프로그래머스 2021 카카오 채용연계형 인턴십 > 거리두기 확인하기 (0) | 2022.08.25 |
[Swift] 프로그래머스 2021 KAKAO BLIND RECRUITMENT > 메뉴 리뉴얼 (0) | 2022.08.09 |
[Swift] 프로그래머스 2019 KAKAO BLIND RECRUITMENT > 실패율 (0) | 2022.07.19 |
[Swift] 프로그래머스 2020 카카오 인턴십 > 키패드 누르기 (0) | 2022.07.07 |