[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/17677
[풀이]
input string에 대해 두 글자씩 끊어서 다중 집합을 만들고 두 집합 간의 교집합/합집합 * 65536을 구해서 return 해주면 되는 문제
첫 번째로 각 input string에 대해 모두 lower case로 변환해주었다.
다음으로 연속된 두 글자가 알파벳인 경우 vector에 push 해주었다.
이중 for문을 통해 교집합을 구하고 교집합의 중복을 막기 위해 한번 확인한 글자는 #로 변환해주었다.
[코드]
#include <string>
#include <cmath>
#include <vector>
using namespace std;
bool isChar(char ch){
if(ch>='a' && ch<='z') return true;
if(ch>='A' && ch<='Z') return true;
return false;
}
int solution(string str1, string str2) {
int answer = 0;
string tmp1="";
string tmp2="";
for(int i=0;i<str1.size();i++){
str1[i]=tolower(str1[i]);
}
for(int i=0;i<str2.size();i++){
str2[i]=tolower(str2[i]);
}
vector<string> p1;
vector<string> p2;
for(int i=0;i<str1.size()-1;i++){
if(isChar(str1[i]) && isChar(str1[i+1]))
p1.push_back(str1.substr(i,2));
}
for(int i=0;i<str2.size()-1;i++){
if(isChar(str2[i]) && isChar(str2[i+1]))
p2.push_back(str2.substr(i,2));
}
int intersection=0; //교집합
int _union= p1.size()+ p2.size(); //합집합
for(int i=0;i<p1.size();i++){
for(int j=0;j<p2.size();j++){
if(p1[i]==p2[j]){
intersection++;
p2[j]="#";
break;
}
}
}
_union-=intersection;
if(_union == 0) return 65536;
answer = intersection * 65536 /_union;
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] PCCP 기출문제 1번 / 동영상 재생기 (JAVA) (0) | 2024.12.08 |
---|---|
[프로그래머스] 하노이의 탑 (JAVA) (0) | 2024.12.08 |
[프로그래머스] 성격 유형 검사하기 (C++) (0) | 2022.08.25 |
[프로그래머스] 배달 (C++) (0) | 2022.08.16 |
[프로그래머스] 캐시(C++) (0) | 2021.08.24 |