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

 

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

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

programmers.co.kr

 

- 교집합 카운팅 후 삭제히여 교집합+남은갯수=합집합 확인하기

#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

int solution(string str1, string str2) {
	int answer = 0;

	vector<string>vec1;
	vector<string>vec2;

	int a = -1;
	while (1) {
		a++;
		if (a == str1.size() - 1) break;
		string tmp1 = str1.substr(a, 2);

		if (tmp1[0] >= 'a' && tmp1[0] <= 'z')
			tmp1[0] += 'A' - 'a';

		if (tmp1[1] >= 'a' && tmp1[1] <= 'z')
			tmp1[1] += 'A' - 'a';

		if (tmp1[0] < 'A' || tmp1[1] < 'A' || tmp1[0]>'Z' || tmp1[1]>'Z' || tmp1[0] == ' ' || tmp1[1] == ' ')
			continue;

		vec1.push_back(tmp1);
	}

	a = -1;
	while (1) {
		a++;
		if (a == str2.size() - 1) break;
		string tmp2 = str2.substr(a, 2);
		if (tmp2[0] >= 'a' && tmp2[0] <= 'z')
			tmp2[0] += 'A' - 'a';
		
		if (tmp2[1] >= 'a' && tmp2[1] <= 'z')
			tmp2[1] += 'A' - 'a';

		if (tmp2[0] < 'A' || tmp2[1] < 'A' || tmp2[0]>'Z' || tmp2[1]>'Z' || tmp2[0] == ' ' || tmp2[1] == ' ')
			continue;
		
		vec2.push_back(tmp2);
	}


	if (vec1.empty() && vec2.empty()) 
		return answer = 65536;

	int A = 0, B = 0;

	for (int i = 0; i < vec1.size(); i++) {
		for (int j = 0; j < vec2.size(); j++) {
			if (vec1[i] == vec2[j]) {
				A++;
				vec1.erase(vec1.begin() + i);
				vec2.erase(vec2.begin() + j);
				i--;
				break;
			}
		}
	}
	
	B = vec1.size() + vec2.size() + A;
	
	float tmp = float(A) / float(B);
	answer = tmp * 65536;
	return answer;
}

int main() {
	cout << solution("aa1 + aa2", "AA12") << endl;//	32768
	cout << solution("FRANCE", "french") << endl;//	16384
	cout << solution("handshake", "shake hands") << endl;//	65536
	cout << solution("aa1 + aa2", "AAAA12") << endl;//	43690
	cout << solution("E = M * C ^ 2", "e = m * c ^ 2");//	65536
	return 0;
}

+ Recent posts