-
프로그래머스 Lv2 [1차]뉴스 클러스터링Computer Science/프로그래머스 2023. 9. 29. 10:42
https://school.programmers.co.kr/learn/courses/30/lessons/17677
나는 이 문제를 다음 조건에 나눠 풀었다.
1. 대소문자는 같은 문자로 취급한다.
2. 특수문자가 들어오는 문자 조합은 버린다.
따라서 대소문자 구분을 없애기 위해 transfrom(str1.begin(), str1.end(), str1.begin(), ::toupper)를 사용했다.
그 뒤 두개의 문자 조합을 만들었다. 하지만 특수문자가 들어오는 경우는 무시하기 위해 다음과 같이 코드를 짰다.
for(int i = 0; i < str1.length(); ++i) { if(str1[i] < 65 || str1[i] > 90 || str1[i + 1] < 65 || str1[i + 1] > 90) continue; string temp; temp = str1[i]; temp += str1[i + 1]; s1.push_back(temp); }
s1문자 조합이 s2에 있는지 확인하기 위해 s1을 순회하며 s2에 문자열이 있는지 확인했다.
중복 된 문자를 제거하기 위해 한번 카운트한 문자는 제거를 했다.
for(int i = 0; i < s1.size(); ++i) { auto it = find(s2.begin(), s2.end(), s1[i]); if(it != s2.end()) { s2.erase(it); ++inter; } }
그 뒤 합집합을 구해 준 뒤, 합집합이 0이라면 문자열 유사도를 1로, 아니라면 double형으로 유사도를 계산한 뒤 int형으로 캐스팅 시켰다.
#include <string> #include <vector> #include <algorithm> #include <cmath> using namespace std; int solution(string str1, string str2) { int answer = 0; vector<string> s1; vector<string> s2; transform(str1.begin(), str1.end(), str1.begin(), ::toupper); transform(str2.begin(), str2.end(), str2.begin(), ::toupper); for(int i = 0; i < str1.length(); ++i) { if(str1[i] < 65 || str1[i] > 90 || str1[i + 1] < 65 || str1[i + 1] > 90) continue; string temp; temp = str1[i]; temp += str1[i + 1]; s1.push_back(temp); } for(int i = 0; i < str2.length(); ++i) { if(str2[i] < 65 || str2[i] > 90 || str2[i + 1] < 65 || str2[i + 1] > 90) continue; string temp; temp = str2[i]; temp += str2[i + 1]; s2.push_back(temp); } int sum = s1.size() + s2.size(); int inter = 0; for(int i = 0; i < s1.size(); ++i) { auto it = find(s2.begin(), s2.end(), s1[i]); if(it != s2.end()) { s2.erase(it); ++inter; } } sum -= inter; if(sum == 0) { return 1 * 65536; }else { double result = ((double)inter / (double)sum) * 65536; answer = result; } return answer; }
'Computer Science > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv2 예상대진표 (0) 2023.09.30 카메라 (0) 2023.09.29 프로그래머스 [1차]프렌즈4블록 (0) 2023.09.28 프로그래머스 Lv2 [1차]캐시 (0) 2023.09.28 프로그래머스 Lv2 [3차]압축 (0) 2023.09.26