본문 바로가기

Algorithm

2018 KAKAO BLIND RECRUITMENT[1차] 뉴스 클러스터링

반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

빡구현 문제

 

#include<iostream>
#include <string>
#include<vector>
#include<cmath>

using namespace std;

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

	for (int i = 0; i < str1.size(); i++)
	{
		if (str1[i] >= 'A' && str1[i] <= 'Z')
		{
			str1[i] -= 'A' - 'a';
		}
	}

	for (int i = 0; i < str2.size(); i++)
	{
		if (str2[i] >= 'A' && str2[i] <= 'Z')
		{
			str2[i] -= 'A' - 'a';
		}
	}

	vector<pair<string, int> > vec1;
	vector<pair<string, int> > vec2;

	string temp = "";
	for (int i = 0; i < str1.size() - 1; i++)
	{
		if ((str1[i] >= 'a' && str1[i] <= 'z') && (str1[i + 1] >= 'a' && str1[i + 1] <= 'z'))
		{
			temp += str1[i];
			temp += str1[i + 1];

			bool flag = false;
			for (int j = 0; j < vec1.size(); j++)
			{
				if (vec1[j].first == temp)
				{
					flag = true;
					vec1[j].second++;
					break;
				}
			}
			if (!flag)
			{
				vec1.push_back({ temp,1 });
			}
			temp = "";

		}
	}


	temp = "";
	for (int i = 0; i < str2.size() - 1; i++)
	{
		if ((str2[i] >= 'a' && str2[i] <= 'z') && (str2[i + 1] >= 'a' && str2[i + 1] <= 'z'))
		{
			temp += str2[i];
			temp += str2[i + 1];

			bool flag = false;
			for (int j = 0; j < vec2.size(); j++)
			{
				if (vec2[j].first == temp)
				{
					flag = true;
					vec2[j].second++;
					break;
				}
			}
			if (!flag)
			{
				vec2.push_back({ temp,1 });
			}

			temp = "";

		}
	}

	vector<string> inter;
	vector<string> uni;

	for (int i = 0; i < vec1.size(); i++)
	{
		for (int j = 0; j < vec2.size(); j++)
		{
			if (vec1[i].first == vec2[j].first)
			{
				int in, un;
				if (vec1[i].second > vec2[j].second)
				{
					in = vec2[j].second;
					un = vec1[i].second;
				}
				else
				{
					in = vec1[i].second;
					un = vec2[j].second;
				}


				for (int k = 0; k < in; k++)
				{
					inter.push_back(vec2[j].first);
				}

				for (int k = 0; k < un; k++)
				{
					uni.push_back(vec1[i].first);
				}

				break;
			}
		}
	}

	for (int i = 0; i < vec1.size(); i++)
	{
		bool flag = false;
		for (int j = 0; j < uni.size(); j++)
		{
			if (vec1[i].first == uni[j])
			{
				flag = true;
				break;
			}
		}
		if (!flag)
		{
			uni.push_back(vec1[i].first);
		}
	}

	for (int i = 0; i < vec2.size(); i++)
	{
		bool flag = false;
		for (int j = 0; j < uni.size(); j++)
		{
			if (vec2[i].first == uni[j])
			{
				flag = true;
				break;
			}
		}
		if (!flag)
		{
			uni.push_back(vec2[i].first);
		}
	}



	if (!vec1.size() && !vec2.size() || !uni.size())
	{
		answer = 65536;
	}
	else
	{
		double x = (double)inter.size() / (double)uni.size() ;
		answer = (int)(x * 65536);
	}


	cout << answer << endl;
	return answer;
}
반응형