Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] 뉴스 클러스터링 (C++) 본문

Problem Solving

[프로그래머스] 뉴스 클러스터링 (C++)

흑개 2021. 10. 2. 22:11

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

 

코딩테스트 연습 - [1차] 뉴스 클러스터링

뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브

programmers.co.kr

#include <string>
#include <map>
#include <cctype>
#include <algorithm>

using namespace std;

map<string, pair<int,int> > m;

bool check(string s){
    return islower(s[0]) && islower(s[1]);
}

void makemap(string str, int v){
    string temp;
    for (int i=0; i<str.size()-1; i++){
        temp="";
        temp+=isupper(str[i])? tolower(str[i]) : str[i];
        temp+=isupper(str[i+1])? tolower(str[i+1]) : str[i+1];
        if (v==1)
            m[temp].first++;
        else
            m[temp].second++;
    }
}


int solution(string str1, string str2) {
    int answer = 0;
    int uni=0; int ints=0;
    makemap(str1, 1);
    makemap(str2, 2);
    for (auto it=m.begin(); it!=m.end(); it++){
        if (check(it->first)){
            uni+=max(it->second.first, it->second.second);
            ints+=min(it->second.first, it->second.second);
        }
    }
    if (ints==0 && uni==0)
        return 65536;
    answer=((double)ints/uni)*65536;
    return answer;
}

Map을 이용한 문제.

대문자인거 소문자로 변환해주고->2개씩 짝지어서 맵에 넣는다.(++해줘서 갯수를 새준다)

맵의 key중 특문 있는건 제외해주고 합집합이면 max, 교집합이면 min인 것으로 설정해준다.

 

다른 분들의 코드를 보니 애초에 map에 넣는 과정에서 둘다 isalphabet 인지 체크한 다음에 넣어주는 방법도 있었다.

map을 2개 써도 된다. 난 맵 1개에 value를 pair로 뒀다.

'Problem Solving' 카테고리의 다른 글

[프로그래머스] 거리두기 확인 (C++)  (0) 2021.10.06
[BOJ 14890] 경사로 (C++)  (0) 2021.10.04
[BOJ 14500] 테트로미노 (C++)  (0) 2021.10.02
[BOJ 13460] 구슬 탈출2 (C++)  (0) 2021.10.02
[BOJ 14503] 로봇 청소기 (C++)  (0) 2021.10.01