Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Map
- dp
- 모의SW역량테스트
- STL
- Sort
- dfs
- Set
- 프로그래머스
- 2018
- priority_queue
- 백트래킹
- 코딩테스트
- 삼성SW테스트
- 완전탐색
- 삼성SW역량테스트
- KAKAO
- 코딩스킬
- 삼성
- C++
- BFS
- 이런게4문제
- 브루트포스
- 레벨3
- 시뮬레이션
- swea
- substr
- find
- 문자열
- 레벨2
- 백준
Archives
- Today
- Total
-
[2019_KAKAO] 매칭 점수 (프로그래머스 레벨 3) 본문
https://programmers.co.kr/learn/courses/30/lessons/42893?language=cpp
괴랄한 문자열 문제다.
조건이 많아서 abc가 word로 주어졌을 때
abca abcabc 가 page에 있다면 기본 점수를 0으로 해야 하는 것을 간과했으며,
기본 URL 확인시 단순 content 뒤에만 보도록 짰었는데 4줄과 같이 META를 정의하고 확인해줬어야 했다.
그래서 첫 번째 문제를 해결해 기본 점수 문제를 해결하고,
두 번째 문제를 해결해 기본 URL을 잘 찾을 수 있었다.
다소 조건이 까다로운 문제였지만, string의 문자열 함수를 이용해 잘 풀 수 있었다.
(문자열 함수 정리 : https://cpp-dev.tistory.com/56?category=852537)
또한 사용자 정의 sort 함수에 들어갈 정렬 기준의 응용도 할 수 있는 기회였다.
(사용자 정의 정렬 기준 : https://cpp-dev.tistory.com/88?category=852537)
그리고 find 함수로 찾고자 하는 문자열이 없는 경우 string::npos 를 반환하는 것을 알 수 있었다.
아래는 소스코드 전체다. 다른 사람들의 풀이와 비교했을 때 꽤 짧은 길이의 코드다.
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
84
85
86
|
#include <string>
#include <vector>
#include <algorithm>
#define META "<meta property=\"og:url\" content=\""
#define ENDURL "\"/>"
#define LINKSTART "<a href="
#define LINKEND "\">"
using namespace std;
bool cmp(pair<int, double> a, pair<int, double> b){
// 앞에 인덱스, 뒤에 점수라면
if (a.second == b.second) return a.first < b.first;
return a.second > b.second;
}
int solution(string word, vector<string> pages) {
vector<string> URL;
vector<double> BasePoint(pages.size(), 0), LinkPoint(pages.size(), 0);
vector<vector<string> > OutLinks(pages.size());
int toLower = 'a' - 'A';
for (int i = 0; i<pages.size(); i++){
for (int j = 0; j<pages[i].length(); j++){
if ('A' <= pages[i][j] && pages[i][j] <= 'Z'){
pages[i][j] += toLower;
}
}
}
if ('A' <= word[i] && word[i] <= 'Z') word[i] += toLower;
}
// 1. 기본점수
for (int i = 0; i<pages.size(); i++){
int index = 0;
int cnt = 0;
while (pages[i].find(word, index) != string::npos){
int ele = pages[i].find(word, index);
char before = pages[i][ele - 1];
if (!('a' <= next && next <= 'z') && !('a' <= before && before <= 'z')) {
cnt++;
}
index = ele + 1;
}
BasePoint[i] = cnt;
}
// 2. URL 찾기
for (int i = 0; i<pages.size(); i++){
int url_start = pages[i].find(META, 0) + 33;
int url_end = pages[i].find(ENDURL, url_start)-1;
URL.push_back(pages[i].substr(url_start, url_end - url_start + 1));
}
// 연관 URL 찾기
for (int i = 0; i<pages.size(); i++){
int idx = 0;
while (pages[i].find(LINKSTART, idx) != string::npos){
int url_start = pages[i].find(LINKSTART, idx) + 9;
int url_end = pages[i].find(LINKEND, url_start)-1;
OutLinks[i].push_back(pages[i].substr(url_start, url_end - url_start + 1));
idx = url_end + 1;
}
}
vector<int> OutLinksNum(pages.size(), 0);
for (int i = 0; i<OutLinks.size(); i++){
OutLinksNum[i] = OutLinks[i].size();
}
for (int i = 0; i<pages.size(); i++){
string cur_URL = URL[i];
for (int j = 0; j<OutLinks.size(); j++){
if (i == j) continue;
if (OutLinks[j].size() == 0) continue;
for (int k = 0; k<OutLinks[j].size(); k++){
if (OutLinks[j][k].compare(cur_URL) == 0){
LinkPoint[i] = LinkPoint[i] + (double)(BasePoint[j] / OutLinksNum[j]);
break;
}
}
}
}
vector<pair<int, double> > Result;
for (int i = 0; i<pages.size(); i++){
Result.push_back(make_pair(i, BasePoint[i] + LinkPoint[i]));
}
sort(Result.begin(), Result.end(), cmp);
int answer = Result[0].first;
return answer;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
'1-3. 카카오 SW테스트' 카테고리의 다른 글
[KAKAO_2018] 캐시 (1차) (0) | 2020.02.18 |
---|---|
[KAKAO_2018] 프렌즈 4블록 (0) | 2020.02.14 |
[2017카카오코드본선] 단체사진 찍기 (0) | 2020.02.06 |
[2020_KAKAO] 괄호 변환 (0) | 2020.02.06 |
Comments