반응형
https://programmers.co.kr/learn/courses/30/lessons/17677
본 문제는 '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 |
댓글