728x90
SMALL
https://programmers.co.kr/learn/courses/30/lessons/49993?language=cpp
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
|
#include <string>
#include <vector>
// 0 1 2 3 4 불가능
//CBD <-> B A C D E
// 1
//------------------------
// 0 1 2 3 4 가능
//CBD <-> C B A D F
// 0 1 1 2 2
//------------------------
// 0 1 2 3 가능
//CBD <-> A E C B
// -1 -1 0 1
//------------------------
// 0 1 2 불가능
//CBD <-> B D A
// 1
//------------------------
// 0 1 2 3 4 불가능
//CBD <-> B A C D E
// 1
//------------------------
// 0 1 2 불가능
//CBD <-> A A B
// -1 -1 1
//------------------------
// 0 1 2 3 4 불가능
//CBD <-> C A A A D
// 0 0 0 0 2
using namespace std;
int solution(string skill, vector<string> skill_trees) {
int answer = 0;
int idx;
bool flag;
int check;
int tmp;
for(int i = 0; i < skill_trees.size(); i++){
flag = true;
idx = -1;
check = -1;
for(int j = 0; j < skill_trees[i].size(); j++){
if(check == -1 && skill.find(skill_trees[i][j]) != 0 && skill.find(skill_trees[i][j]) != string::npos) {
flag = false;
break;
}
check = 1;
if(skill.find(skill_trees[i][j]) == string::npos){
continue;
}
tmp = skill.find(skill_trees[i][j]);
if( (tmp-idx) > 1){
flag = false;
break;
}
idx = skill.find(skill_trees[i][j]);
}
if(flag == true){
answer++;
}
}
return answer;
}
|
cs |
부끄럽지만... 코딩 경험이 부족해서 그런지 너무 헤맸던 문제,,,ㅠ ㅠ 이제 시작이니깐 앞으로 연습하다보면 더 좋은 코드가 나오겠지!
알아야할 것 !
- String.find(string) 함수의 리턴 값을 알아야함
1
2
3
4
5
6
7
8
9
10
|
ex)
int result;
string text = "abcde";
result = text.find("a") // result = 0
result = text.find("b") // result = 1
result = text.find("c") // result = 2
result = text.find("z") // result = 19200000 (더미 값)
|
cs |
- skill.find(skill_trees[i][j]) : skill_trees[i][j]이 skill에 없다면, -1을 반환하는 것이 아닌 엄청 큰 더미값이 반환된다.
그래서 값이 없을때는 skill.find(skill_trees[i][j]) != 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
|
for(int j = 0; j < skill_trees[i].size(); j++){
if(check == -1 && skill.find(skill_trees[i][j]) != 0 && skill.find(skill_trees[i][j]) != string::npos) {
// 해당 if문은 각 vector값의 첫번째 char가 CBD중 C가 아닐때 바로 answer에서 제외하는 코드
flag = false;
break;
}
check = 1; //vector 값의 첫번째 char를 비교할때가 아니면 모두 check는 1로 설정 (첫번째 char 비교할때만 check = -1)
if(skill.find(skill_trees[i][j]) == string::npos){ //char를 하나씩 비교할때, CBD가 아니면 continue
continue;
}
tmp = skill.find(skill_trees[i][j]); // tmp는 현재 skill.find(skill_trees[i][j])값 , idx는 이전 skill.find(skill_trees[i][j]) 값
if( (tmp-idx) > 1){ // 이전 값과 현재 값의 차이가 1을 넘어서면 answer에서 제외
flag = false;
break;
}
idx = skill.find(skill_trees[i][j]); //idx값 업데이트
}
|
cs |
LIST
'알고리즘' 카테고리의 다른 글
LeetCode : : 118번 Pascal's Triangle - C++ 풀이 (0) | 2022.01.03 |
---|---|
LeetCode : : 66번 Plus One - C++ 풀이 (0) | 2022.01.01 |
백준 : : 4344번 평균은 넘겠지 - C++ 풀이 (0) | 2021.12.31 |
LeetCode : : 455번 Assign Cookies - C++ 풀이 (0) | 2021.12.31 |
백준 : : 2920번 음계 - C++ 풀이 (0) | 2021.12.30 |