반응형
https://programmers.co.kr/learn/courses/30/lessons/17677
코딩테스트 연습 - [1차] 뉴스 클러스터링 | 프로그래머스
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브는 사용자들이 편리하게 다양한 뉴스를 찾아볼 수 있도록 문제점을 개선하는 업무를 맡게 되었다. 개발의 방향을 잡기 위해 튜브는 우선 최근 화제가 되고 있는 카카오 신입 개발자 공채 관련 기사를 검색해보았다. 카카오 첫 공채..'블라인드' 방식 채용 카카오, 합병 후 첫
programmers.co.kr
본 문제는 '2018 KAKAO BLIND RECRUITMENT'로 kakao Tech에 의하면 "정답률 41.84%," 라고 한다. 난이도는 중으로 구분되어 있다. 다중집합의 교집합과 합집합을 구하는 문제다. 이번 문제는 "특수문자가 포함된 원소는 버리고, 대소문자를 구분하지 않고 비교한다."는 조건 때문에 코드가 좀 긴 편이다. 함수를 이용하여 중복된 코드를 줄일 수 있지만, 귀찮아서 수정하지 않았다. 참고로 교집합의 개수를 구할 때, 중복된 원소를 확인 후 변환하지 않고 2중 반복문을 하여 조금 헤맨 문제다.
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string str1, string str2) {
int answer = 0;
vector<string> v1;
vector<string> v2;
for (int i = 0; i < str1.size(); i++) {
// 2개의 문자열 씩 비교
string tmp = str1.substr(i, 2);
string temp = "";
// 첫 번째, 두 번째 문자 알파벳 확인 이 때, 특수문자 원소 제거
if ((tmp[0]-'a' >= 0 && tmp[0]-'a' <= 25) || (tmp[0]-'A' >= 0 && tmp[0]-'A' <= 25)) {
if ((tmp[1]-'a' >= 0 && tmp[1]-'a' <= 25) || (tmp[1]-'A' >= 0 && tmp[1]-'A' <= 25)) {
// 첫 번째, 두번째 문자 소문자로 변환
if ((tmp[0]-'a' >= 0 && tmp[0]-'a' <= 25) && (tmp[1]-'a' >= 0 && tmp[1]-'a' <= 25)) {
v1.push_back(tmp);
}
else if ((tmp[0]-'a' >= 0 && tmp[0]-'a' <= 25) && (tmp[1]-'A' >= 0 && tmp[1]-'A' <= 25)) {
temp += tmp[0];
temp += tmp[1]-'A'+'a';
v1.push_back(temp);
}
else if ((tmp[0]-'A' >= 0 && tmp[0]-'A' <= 25) && (tmp[1]-'a' >= 0 && tmp[1]-'a' <= 25)) {
temp += tmp[0]-'A'+'a';
temp += tmp[1];
v1.push_back(temp);
}
else if ((tmp[0]-'A' >= 0 && tmp[0]-'A' <= 25) && (tmp[1]-'A' >= 0 && tmp[1]-'A' <= 25)) {
temp += tmp[0]-'A'+'a';
temp += tmp[1]-'A'+'a';
v1.push_back(temp);
}
}
}
}
for (int i = 0; i < str2.size(); i++) {
string tmp = str2.substr(i, 2);
string temp = "";
if ((tmp[0]-'a' >= 0 && tmp[0]-'a' <= 25) || (tmp[0]-'A' >= 0 && tmp[0]-'A' <= 25)) {
if ((tmp[1]-'a' >= 0 && tmp[1]-'a' <= 25) || (tmp[1]-'A' >= 0 && tmp[1]-'A' <= 25)) {
if ((tmp[0]-'a' >= 0 && tmp[0]-'a' <= 25) && (tmp[1]-'a' >= 0 && tmp[1]-'a' <= 25)) {
v2.push_back(tmp);
}
else if ((tmp[0]-'a' >= 0 && tmp[0]-'a' <= 25) && (tmp[1]-'A' >= 0 && tmp[1]-'A' <= 25)) {
temp += tmp[0];
temp += (tmp[1]-'A'+'a');
v2.push_back(temp);
}
else if ((tmp[0]-'A' >= 0 && tmp[0]-'A' <= 25) && (tmp[1]-'a' >= 0 && tmp[1]-'a' <= 25)) {
temp += (tmp[0]-'A'+'a');
temp += tmp[1];
v2.push_back(temp);
}
else if ((tmp[0]-'A' >= 0 && tmp[0]-'A' <= 25) && (tmp[1]-'A' >= 0 && tmp[1]-'A' <= 25)) {
temp += (tmp[0]-'A'+'a');
temp += (tmp[1]-'A'+'a');
v2.push_back(temp);
}
}
}
}
float cal = 0;
// 교집합 개수 cnt
for (int i = 0; i < v1.size(); i++) {
for (int j = 0; j < v2.size(); j++) {
if (v1[i] == v2[j]) {
cal += 1;
v2[j] = 'X'; // 교집합의 원소일 때, 값 변경
break;
}
}
}
float ans = 1;
if (v1.size()+v2.size()-cal == 0 && cal == 0) ans = 1;
else {
ans = cal / (v1.size()+v2.size()-cal);
}
return answer = ans * 65536;
}
|
cs |

반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 스택/큐 - 쇠막대기, C++ (0) | 2020.01.04 |
---|---|
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT - [1차] 캐시, C++ (0) | 2020.01.04 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT - [1차] 프렌즈4블록, C++ (0) | 2020.01.04 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT - [3차] n진수 게임, C++ (0) | 2020.01.04 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT - [3차] 압축, C++ (0) | 2020.01.04 |
댓글