250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 c++ KAKAO)뉴스 클러스터링 본문
728x90
반응형
먼저 str1과 str2를 두 글자씩 끊어서 각각 s1, s2 벡터에 넣어주도록 한다.
그러기 위해서는 str1과 str2을 모두 대문자나, 소문자로 바꿔주어야 한다.
그래서 transform() 함수를 이용하여 두 글자 모두 소문자로 바꿔주었다.
그리고 각각 for문을 이용하여 2글자씩 끊고, 두 글자 모두 알파벳인 경우 s1, s2에 넣어주었다.
만약 for문을 다 돈 후에 s1, s2가 모두 비어있으면 65536을 바로 리턴해준다.
아니라면 max변수에 s1.size() + s2.size()를 대입한다.
(max = 합집합, min = 교집합을 나타낸다..! 변수명 오류..ㅎㅎ)
s1, s2의 크기를 비교하여 교집합의 개수를 구하는 for문을 수행하고,
max -= min을 해주면 합집합의 개수가 나온다.
(합집합, 교집합 개수 구하는 공식 사용..!)
합집합의 개수가 0인 경우 나누었을 때 에러가 발생하므로 65536을 리턴하여 준다.
아니라면 min, max를 double형으로 변환 후 나누어주고, 마지막에 65536을 곱하여 리턴하면 끝..!
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(string str1, string str2) {
int answer = 0, min = 0, max = 0;
vector<string> s1, s2, words;
transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
transform(str2.begin(), str2.end(), str2.begin(), ::tolower);
for(int i = 0; i < str1.size() - 1; i++)
{
string tmp = str1.substr(i, 2);
if(tmp[0] >= 'a' && tmp[0] <= 'z' && tmp[1] >= 'a' && tmp[1] <= 'z')
s1.push_back(tmp);
}
for(int i = 0; i < str2.size() - 1; i++)
{
string tmp = str2.substr(i, 2);
if(tmp[0] >= 'a' && tmp[0] <= 'z' && tmp[1] >= 'a' && tmp[1] <= 'z')
s2.push_back(tmp);
}
if(s1.empty() && s2.empty())
return 65536;
max = s1.size() + s2.size();
if(s1.size() > s2.size())
{
for(int i = 0; i < s2.size(); i++)
{
auto itr = find(s1.begin(), s1.end(), s2[i]);
if(itr != s1.end())
{
min++;
s1.erase(itr);
}
}
}
else
{
for(int i = 0; i < s1.size(); i++)
{
auto itr = find(s2.begin(), s2.end(), s1[i]);
if(itr != s2.end())
{
min++;
s2.erase(itr);
}
}
}
max -= min;
if(max == 0)
return 65536;
double tmp = (double)min / (double)max;
return tmp * 65536;
}
728x90
반응형
'프로그래머스 알고리즘 > KAKAO' 카테고리의 다른 글
(프로그래머스 c++ KAKAO)캐시 (0) | 2020.06.03 |
---|---|
(프로그래머스 c++ KAKAO)프렌즈 4블록 (0) | 2020.06.02 |
(프로그래머스 c++ KAKAO)튜플 (0) | 2020.05.26 |
(프로그래머스 c++ KAKAO)카카오 프렌즈 컬러링북 (3) | 2020.05.08 |
(프로그래머스 c++ KAKAO)문자열 압축 (0) | 2020.05.06 |