2018 카카오 블라인드 공채 1차 코테 문제
5시간을 잡고 실전처럼 진행하였으며 코드의 최적화나 알고리즘은 정확하지 않음.
코딩테스트 연습 - [1차] 뉴스 클러스터링 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
6번 문제였으며 1시간정도 소요되었다.
중복을 허용한 문제였기 때문에 set을 사용할 수 는 없었고 내가 만들어 처리해야했다.
먼저 각각의 string을 나눠 set을 만든다. 다만 대소문자 구분이 없이 같다 처리하기 때문에 하나로 바꿔서 set을 만든다.
그 후, 각각의 set을 sort하여 교집합을 구하면 된다. 문제에서 묻는것은 J이기 때문에, 교집합의 갯수와 합집합의 갯수만 구하면 된다.
하지만 전체 갯수 = 합집합의 갯수 + 교집합의 갯수이므로 둘중 하나만 구하면 된다.
교집합의 갯수가 구하기 쉽기때문에 교집합의 개수만 구하면 정답이 나온다.
교집합의 개수를 구하는것은 , FIFO형태를 이용하였으며, 각 집합의 제일 앞을 비교하며 갯수를 구할 것이다.
각 집합의 제일 앞을 비교하였을때, 같으면 교집합의 갯수를 늘려주고, 다르다면 내림차순으로 sort 하였기 때문에 크기가 작은것을 빼준다.
지금보니 투포인터라는 방식과 유사한것같다.
그렇게 교집합의 수를 구한 후, 합집합의 수는 집합의 수를 더하여 교집합의 수를 뺴면 된다.
물론 집합이 비었을때의 처리도 해주어야한다.
#define MUL 65536
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(string str1, string str2) {
int answer = 0;
vector<string> set1;
vector<string> set2;
for (int i = 0; i < str1.size() - 1; i++)
if (isalpha(str1[i]))
{
if (isalpha(str1[i + 1]))
{
string temp = "";
temp += (char)tolower(str1[i]);
temp += (char)tolower(str1[i + 1]);
set1.push_back(temp);
}
else
i++;
}
for (int i = 0; i < str2.size() - 1; i++)
if (isalpha(str2[i]))
{
if (isalpha(str2[i + 1]))
{
string temp = "";
temp += (char)tolower(str2[i]);
temp += (char)tolower(str2[i + 1]);
set2.push_back(temp);
}
else
i++;
}
sort(set1.begin(), set1.end());
sort(set2.begin(), set2.end());
int common = 0;
int uncomm = set1.size() + set2.size();
double J;
if (uncomm == 0)
J = 1;
else
{
while (!set1.empty() && !set2.empty())
{
if (set1[0] == set2[0])
{
common++;
set1.erase(set1.begin());
set2.erase(set2.begin());
}
else if (set1[0] > set2[0])
set2.erase(set2.begin());
else
set1.erase(set1.begin());
}
uncomm -= common;
J = (double)common / uncomm;
}
answer = J * MUL;
return answer;
}
'Coding_Test > 2018_KAKAO_BLIND' 카테고리의 다른 글
[2018 카카오 블라인드 공채] 셔틀버스 (C++) (0) | 2022.04.30 |
---|---|
[2018 카카오 블라인드 공채] 프렌즈4블록 (C++) (0) | 2022.04.30 |
[2018 카카오 블라인드 공채] 캐시 (C++) (0) | 2022.04.30 |
[2018 카카오 블라인드 공채] 비밀지도 (C++) (0) | 2022.04.30 |
[2018 카카오 블라인드 공채] 다트 게임 (C++) (0) | 2022.04.30 |