본문 바로가기
Coding Test/Programmers

[Programmers] (2018 KAKAO BLIND RECRUITMENT) Lv 2. [1차] 뉴스 클러스터링

by song.ift 2023. 6. 16.

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

 

프로그래머스

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

programmers.co.kr

 

cpp
닫기
#include <string> #include <vector> #include <map> #define MULTIPLE 65536 using namespace std; int Min(int A, int B) { return A < B ? A : B; } int Max(int A, int B) { return A > B ? A : B; } int Check_State(char C) { ​​​​if ('A' <= C && C <= 'Z') return 2; ​​​​if ('a' <= C && C <= 'z') return 1; ​​​​return 0; } char Invert(char C) { ​​​​C = C - 'A'; ​​​​C = C + 'a'; ​​​​return C; } int solution(string str1, string str2) { ​​​​vector<string> Total_Str; ​​​​map<string, int> A, B; ​​​​/* str1에 대해서 "올바른 문자열" 추출하기. */ ​​​​for (int i = 0; i < str1.length() - 1; i++) ​​​​{ ​​​​​​​​char First = str1[i]; ​​​​​​​​char Second = str1[i + 1]; ​​​​​​​​int First_State = Check_State(First); ​​​​​​​​int Second_State = Check_State(Second); ​​​​​​​​ ​​​​​​​​if (First_State == 0 || Second_State == 0) continue; ​​​​​​​​if (First_State == 2) First = Invert(First); ​​​​​​​​if (Second_State == 2) Second = Invert(Second); ​​​​​​​​ ​​​​​​​​string Temp = ""; ​​​​​​​​Temp = Temp + First; ​​​​​​​​Temp = Temp + Second; ​​​​​​​​/* 전체 문자열을 관리할 때는, 중복되지 않게 삽입해야한다. */ ​​​​​​​​/* 중복을 확인하기 위해서는 map에 이미 값이 있는지 확인하면 된다. */ ​​​​​​​​if (A[Temp] == 0) Total_Str.push_back(Temp); ​​​​​​​​A[Temp]++; ​​​​} ​​​​/* str2에 대해서 "올바른 문자열" 추출하기. */ ​​​​for (int i = 0; i < str2.length() - 1; i++) ​​​​{ ​​​​​​​​char First = str2[i]; ​​​​​​​​char Second = str2[i + 1]; ​​​​​​​​int First_State = Check_State(First); ​​​​​​​​int Second_State = Check_State(Second); ​​​​​​​​if (First_State == 0 || Second_State == 0) continue; ​​​​​​​​if (First_State == 2) First = Invert(First); ​​​​​​​​if (Second_State == 2) Second = Invert(Second); ​​​​​​​​string Temp = ""; ​​​​​​​​Temp = Temp + First; ​​​​​​​​Temp = Temp + Second; ​​​​​​​​/* str2에서 발생한 문자열도, 전체 문자열을 관리하는 vector에 값을 삽입해야함. */ ​​​​​​​​/* 물론, 중복이 되지 않게 하기 위해서, map을 이용해서 판단. */ ​​​​​​​​if (A[Temp] == 0 && B[Temp] == 0) Total_Str.push_back(Temp); ​​​​​​​​B[Temp]++; ​​​​} ​​​​ ​​​​if (Total_Str.size() == 0) return MULTIPLE; ​​​​int Intersection, Union; ​​​​Intersection = Union = 0; ​​​​for(int i = 0; i < Total_Str.size(); i++) ​​​​{ ​​​​​​​​/* 교집합은, 두 집합 중 더 적은 갯수. */ ​​​​​​​​/* 합집합은, 두 집합 중 더 큰 갯수. */ ​​​​​​​​string Str = Total_Str[i]; ​​​​​​​​Intersection = Intersection + Min(A[Str], B[Str]); ​​​​​​​​Union = Union + Max(A[Str], B[Str]); ​​​​} ​​​​ ​​​​double answer = (double)Intersection / Union; ​​​​answer = answer * MULTIPLE; ​​​​return (int)answer; }

GitHub : https://github.com/developeSHG/Algorithm-Baekjoon_Programmers/blob/b88304d6343cf515122b4d72e441f628e536a668/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/lv2/17677.%E2%80%85%EF%BC%BB1%EC%B0%A8%EF%BC%BD%E2%80%85%EB%89%B4%EC%8A%A4%E2%80%85%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81/%EF%BC%BB1%EC%B0%A8%EF%BC%BD%E2%80%85%EB%89%B4%EC%8A%A4%E2%80%85%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81.cpp

 

GitHub - developeSHG/Algorithm-Baekjoon_Programmers: 백준 and 프로그래머스 소스코드

백준 and 프로그래머스 소스코드. Contribute to developeSHG/Algorithm-Baekjoon_Programmers development by creating an account on GitHub.

github.com

 

댓글