-
프로그래머스 [1차] 뉴스 클러스터링C++프로그래머스(Programmers) 2022. 2. 25. 00:08반응형
입력 형식
- 입력으로는 str1과 str2의 두 문자열이 들어온다. 각 문자열의 길이는 2 이상, 1,000 이하이다.
- 입력으로 들어온 문자열은 두 글자씩 끊어서 다중집합의 원소로 만든다. 이때 영문자로 된 글자 쌍만 유효하고, 기타 공백이나 숫자, 특수 문자가 들어있는 경우는 그 글자 쌍을 버린다. 예를 들어 "ab+"가 입력으로 들어오면, "ab"만 다중집합의 원소로 삼고, "b+"는 버린다.
- 다중집합 원소 사이를 비교할 때, 대문자와 소문자의 차이는 무시한다. "AB"와 "Ab", "ab"는 같은 원소로 취급한다.
출력 형식
입력으로 들어온 두 문자열의 자카드 유사도를 출력한다. 유사도 값은 0에서 1 사이의 실수이므로, 이를 다루기 쉽도록 65536을 곱한 후에 소수점 아래를 버리고 정수부만 출력한다.
예제 입출력
str1str2answer
FRANCE french 16384 handshake shake hands 65536 aa1+aa2 AAAA12 43690 E=M*C^2 e=m*c^2 65536 => MAP 자료형과 SET자료형을 사용하여 풀이를 하였습니다.
- 주어진 문자열을 대문자화 시킵니다.
- MAP자료형을 활용하여 map1 과 map2를 생성합니다. ( 각 문자열의 원소집합 => key , 원소집합이 나타난 수 => value)
- SET자료형을 활용하여 두 문자열에 나타난 모든 원소의 집합을 나타냅니다.
- 교집합 : min ( map1[] , map2[] )
- 합집합 : max( map1[], map2[] )
- 위와 같이 표현합니다.
=> 기본알고리즘의 구성은 위와 같습니다. 자세한 풀이는 아래의 사진을 참조해주시기 바랍니다.
#include <string> #include <algorithm> #include <set> #include <map> #include <iostream> #define mulNum 65536 using namespace std;; int solution(string str1, string str2) { int answer = 0; map<string,int> map1,map2; //각 str 다중집합 map set<string> allStr; // 전체 다중집합 set //소문자 => 대문자화 for(int i=0; i< str1.size(); i++) { str1[i] = toupper(str1[i]); } for(int i=0; i< str2.size(); i++) { str2[i] = toupper(str2[i]); } //map과 set채워넣기 string tmp; for(int i=0; i< str1.size()-1; i++) { if((str1[i] >= 'A' && str1[i]<='Z') && (str1[i+1] >= 'A' && str1[i+1]<='Z')) // 문자라면 { tmp =str1.substr(i,2); map1[tmp]++; allStr.insert(tmp); } } for(int i=0; i< str2.size()-1; i++) { if(str2[i] >= 'A' && str2[i]<='Z' && str2[i+1] >= 'A' && str2[i+1]<='Z') // 문자라면 { tmp =str2.substr(i,2); map2[tmp]++; // cout << tmp<<" "; allStr.insert(tmp); } } for(auto k : allStr)cout << k<<" "; //자키드유사도추출 //교집합과 합집합의 크기 구하기 int inter=0; int uni=0; for(auto i : allStr) { inter += min(map1[i], map2[i]); uni += max(map1[i], map2[i]); cout << i <<'\n'; cout << map1[i] <<" "<<map2[i]<<'\n'; } if(inter ==0 && uni ==0) return mulNum; answer = mulNum*inter / uni; return answer; }
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
프로그래머스 구명보트 C++ (0) 2022.03.11 프로그래머스 후보키 C++ (0) 2022.03.02 프로그래머스 나머지가 1이 되는 수 찾기 (0) 2022.02.22 프로그래머스 거리두기 확인하기 C++ (0) 2022.02.21 두 개 뽑아서 더하기 (0) 2022.02.16