일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 카카오
- 삼성 SW 역량테스트
- 2018 카카오 공채
- 자바
- 프로그래머스
- 2019 KAKAO BLIND RECRUITMENT
- CS 스터디
- set
- 비트마스크
- 젠킨스
- c++
- map
- 2019 카카오 공채
- 삼성 SW 기출문제
- 2018 KAKAO BLIND RECRUITMENT 1차
- 카카오 공채
- 2018 KAKAO BLIND RECRUITMENT
- 2018 카카오
- 알고리즘
- 백준
- gradle
- 2020 카카오 공채
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- dfs
- 부스트코스
- Baekjoon
- gcp
- bfs
- 2020 KAKAO BLIND RECRUITMENT
- Java
Archives
- Today
- Total
아무코딩
[2018 KAKAO BLIND RECRUITMENT 1차] 뉴스 클러스터링 본문
문제풀이
새로운 STL을 많이 적용해 볼수 있는 문제였다.
교집합과 합집합을 구해 나누는 문제이다.
이전에 풀때는 함수를 사용하지 않고 직접 구현하였지만 이번엔 있는 stl을 활용해서 풀어보았다.
아래에 교집합 합집합 stl을 사용 하기전에 각 벡터는 정렬을 해주어야한다.
1. 교집합.
vector<string> inter_result;
set_intersection(vecA.begin(), vecA.end(), vecB.begin(), vecB.end(), back_inserter(inter_result));
back_inserter를 이용하면 resize를 이용하여 미리 크기를 정해두지 않고 새로운 컨테이너에 삽입할 수 있다.
2. 합집합.
vector<string> union_result;
set_union(vecA.begin(), vecA.end(), vecB.begin(), vecB.end(), back_inserter(union_result));
그리고 자주 사용하는 대문자 -> 소문자 string 반환함수도 깔끔하게 짜놓았다.
string changeLowerCaseStr(string str){
for(int i=0;i<str.size();i++){
if(str[i] <='Z' && str[i] >='A')
str[i] = str[i] -('A'-'a');
}
return str;
}
소스코드
더보기
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<string> setA;
vector<string> setB;
vector<string> union_result;
vector<string> inter_result;
string changeLowerCaseStr(string str){
for(int i=0;i<str.size();i++){
if(str[i] <='Z' && str[i] >='A')
str[i] = str[i] -('A'-'a');
}
return str;
}
bool isValidSubStr(string str,int i){
if(str[i]<='z'&&str[i]>='a'&&str[i+1]<='z'&&str[i+1]>='a')
return true;
return false;
}
int solution(string str1, string str2) {
int answer = 0;
str1 = changeLowerCaseStr(str1);
str2 = changeLowerCaseStr(str2);
for(int i=0;i<str1.size()-1;i++){
if(isValidSubStr(str1,i))
}
for(int i=0;i<str2.size()-1;i++){
if(isValidSubStr(str2,i))
}
sort(setA.begin(),setA.end());
sort(setB.begin(),setB.end());
set_union(setA.begin(), setA.end(), setB.begin(), setB.end(), back_inserter(union_result));
set_intersection(setA.begin(), setA.end(), setB.begin(), setB.end(), back_inserter(inter_result));
// cout<<union_result.size()<<endl;
// cout<<inter_result.size()<<endl;
if(union_result.size()==0)
return 65536;
double similarity = (double)inter_result.size()/(double)union_result.size();
// cout<<similarity<<endl;
answer = similarity*65536;
return answer;
}
int main(){
string str1 = "FRANCE";
string str2 = "french";
cout<<solution(str1,str2)<<endl;
}
|
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/17677#
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 (0) | 2020.05.07 |
---|---|
[2018 KAKAO BLIND RECRUITMENT 1차] 추석트래픽 (0) | 2020.05.07 |
[2018 KAKAO BLIND RECRUITMENT 1차] 프렌즈 4 블록 (0) | 2020.05.06 |
[2018 KAKAO BLIND RECRUITMENT 1차] 캐시 (0) | 2020.05.06 |
[2018 KAKAO BLIND RECRUITMENT 1차] 비밀지도 (0) | 2020.05.06 |
Comments