-
프로그래머스 17677 뉴스 클러스터링 [C++]개발/문제풀이 2020. 1. 19. 15:42
https://programmers.co.kr/learn/courses/30/lessons/17677
bool IsLowerChar(char c) { return (c >= 'a' && c <= 'z'); } string ToLowerCase(string str) { const int diff = 'A' - 'a'; for (int i = 0; i < str.length(); i++) { if (str[i] >= 'A' && str[i] <= 'Z') str[i] -= diff; } return str; } int solution(string str1, string str2) { str1 = ToLowerCase(str1); str2 = ToLowerCase(str2); unordered_map<string, int> map1, map2; for (int i = 0; i < str1.length(); i++) { if (IsLowerChar(str1[i]) && IsLowerChar(str1[i + 1])) { string elem = str1.substr(i, 2); map1[elem]++; } } for (int i = 0; i < str2.length(); i++) { if (IsLowerChar(str2[i]) && IsLowerChar(str2[i + 1])) { string elem = str2.substr(i, 2); map2[elem]++; } } int mapSize1 = 0, mapSize2 = 0; int intersectionCount = 0, unionCount = 0; for (auto pair : map1) mapSize1 += pair.second; for (auto pair : map2) mapSize2 += pair.second; for (auto pair : map1) { intersectionCount += min(pair.second, map2[pair.first]); } unionCount = mapSize1 + mapSize2 - intersectionCount; if (unionCount <= 0) return 65536; float similarity = ((float)intersectionCount / unionCount) * 65536; return (int)similarity; }
ToLowerCase와 IsLowerChar은 내부 라이브러리 함수로 대체하고, unionCount를 계산하는 과정을 더 단순하게 만들 수 있어 보인다.
'개발 > 문제풀이' 카테고리의 다른 글
프로그래머스 17678 추석 트래픽 [C++] (0) 2020.05.01 프로그래머스 17683 방금그곡 [C++] (0) 2020.04.24