728x90
level 2 : 뉴스 클러스터링
https://programmers.co.kr/learn/courses/30/lessons/17677?language=cpp
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
코드
//프로그래머스 뉴스 클러스터링
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(string str1, string str2) {
int answer = 0;
vector <string> s1;
vector <string> s2;
//str1 집합
for (int i = 0; i < str1.size() - 1; i++) {
string s = "";
//알파벳이 아닐때
if (!isalpha(str1[i]) || !isalpha(str1[i+1]))
continue;
//대문자로 변환
s += toupper(str1[i]);
s += toupper(str1[i+1]);
s1.push_back(s);
}
//str2 집합
for (int i = 0; i < str2.size() - 1; i++) {
string s = "";
//알파벳이 아닐때
if (!isalpha(str2[i]) || !isalpha(str2[i + 1]))
continue;
//대문자로 변환
s += toupper(str2[i]);
s += toupper(str2[i + 1]);
s2.push_back(s);
}
int sum = s1.size() + s2.size();
int common = 0;
if (sum == 0)
return 65536;
for (int i = 0; i < s1.size(); i++) {
auto it = find(s2.begin(), s2.end(), s1[i]);
//교집합이 있을 때
if (it != s2.end()) {
s2.erase(it);
common++;
}
}
answer = (common * 65536) / (sum - common);
return answer;
}
int main() {
string str1 = "aa1+aa2";
string str2 = "AAAA12";
cout << solution(str1, str2) << "\n";
return 0;
}
설명
vector s1, s2를 만들어 각 A와 B의 집합을 만들어 넣어주었다. 여기서 알파벳 이외의 문자가 포함되면 안 되므로 isalpha() 함수를 사용하여 이 문자가 알파벳인지 아닌지 확인해서 집합을 만들어 줄 수 있다.
이때 s1, s2 벡터의 사이즈가 모두 0이면 65536을 바로 return 해준다.
이후 find()함수를 사용하여 교집합이 있는 문자를 찾아주어 common을 증가시켜준다.
합집합은 벡터 s1과 s2를 더하여 교집합을 뺀 값이다.
유사도에 65536을 곱하여 return 해준다.
고찰
toupper('a') // 대문자 변환
tolower('A') // 소문자 변환
다음 함수는 각각 대문자 변환, 소문자 변환을 해준다. 두 함수는 문자를 쉽게 대소문자로 변환해준다. 이때 주의할 점은 두 함수 반환형은 int형이라는 것이다. 이 부분만 조심해서 문자를 변환할 수 있다.
isalpha('a') // 알파벳 확인
isalpha() 함수는 문자가 알파벳인지 아닌지 확인해준다.
이 함수를 사용하여 알파벳인지 아닌지 쉽게 확인이 가능하다.
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
알고리즘(C++) / 프로그래머스 level 2 : 기능 개발 (0) | 2021.07.25 |
---|---|
알고리즘(C++) / 프로그래머스 level 2 : 멀쩡한 사각형 (0) | 2021.07.24 |
알고리즘(C++) / 프로그래머스 level 2 : 조이스틱 (0) | 2021.07.18 |
알고리즘(C++) / 프로그래머스 level 2 : 구명보트 (0) | 2021.07.14 |
알고리즘(C++) / 프로그래머스 level 2 : 캐시 (0) | 2021.07.13 |
댓글