-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
안녕하세요 공부법 관련해서 질문드립니다.
22.05.06 06:47 작성 조회수 370
0
안녕하세요 큰돌님!
자바스크립트로 개발을 하다가 코테언어는 C++로 선택한 학생입니다.
강의교안을 한번 다 봤는데,
개념강의 1강에서 나오는 psum과 관련된 문제를 풀려고 하니까 처음부터 어떻게 코드를 적어야할지 감이 잘 안오는데,
다시한번 강의교안을 보면서 외우는 것이 좋을까요?
아니면 문제를 풀면서 익혀보는게 좋을까요?
잘 배워서 꼭 C++로 코딩테스트 잘 보고 싶습니다!
감사합니다
답변을 작성해보세요.
0
송인성
2022.08.07
안녕하세요 큰돌님 교안 보면서 로그 찍어보던중에 궁금증이 생겨서 질문 남깁니다.
#include <bits/stdc++.h>
using namespace std;
vector<string> split(string input, string delimiter) { vector<string> ret;
long long pos = 0;
string token = "";
while ((pos = input.find(delimiter)) != string::npos) { token = input.substr(0, pos); ret.push_back(token);
cout << input.find(delimiter) << "\n"; ✅
input.erase(0, pos + delimiter.length());
} ret.push_back(input); return ret;
}
int main(){
string s = "안녕하세요 큰돌이는 바보에요 정말이에요!"; string d = " ";
vector<string> a = split(s, d);
/*
for(string b : a) cout << b << "\n";\
안녕하세요 큰돌이는 바보에요 정말이에요!
*/
}
해당 코드에서 ✅을 찍어보면,
15
12
12
12
12
가 나오는데 이 숫자가 나오는 이유가 궁금합니다!
한글이라서 이러한 index가 나오는것인지 궁금하고, 영어로 입력하고 index를 보면 순서대로 잘 나오는거같아서요!
한글이라서 이러한 index가 나오는것인지 궁금하고, 영어로 입력하고 index를 보면 순서대로 잘 나오는거같아서요!
큰돌
지식공유자2022.08.07
저거 예제를 바꾸든가 해야겠어요 ㅠㅠ / 네 맞습니다. 한글이라 저런 숫자가 나와요. 컴파일러마다 다르긴 한데 한글은 한글자에 3바이트를 먹어요. 그래서 3 *5라서 15번째... 이런식으로 나오게 됩니다. 영어는 1개의 글자당 1바이트라 그렇지 않구요. ㅎㅎ 수정된 예시를 첨부합니다.
#include <bits/stdc++.h>
using namespace std;
vector<string> split(string input, string delimiter) {
vector<string> ret;
long long pos = 0;
string token = "";
while ((pos = input.find(delimiter)) != string::npos) {
token = input.substr(0, pos);
ret.push_back(token);
input.erase(0, pos + delimiter.length());
}
ret.push_back(input);
return ret;
}
vector<string> split_debug(string input, string delimiter) {
vector<string> ret;
long long pos = 0;
string token = "";
while ((pos = input.find(delimiter)) != string::npos) {
long long pos = input.find(delimiter);
cout << "POS : " << pos << '\n'; // 15 12 15 15
if(pos == string::npos)break;
token = input.substr(0, pos);
ret.push_back(token);
input.erase(0, pos + delimiter.length());
}
ret.push_back(input);
return ret;
}
int main(){
string s = "안녕하세요 큰돌이는 킹갓제너럴 천재입니다 정말이에요!";
string d = " ";
vector<string> a = split(s, d);
string s2 = "aaaa bbb ccccc ee ddddddddd!";
vector<string> c = split_debug(s2, d);
// 4 3 5 2 띄어쓰기를 찾아 해당 첫번째 인덱스를 반환한다.
// 문자열이 erase되기 때문에 aaaa, bb 이런식으로 되는 것도 생각.
for(string b : a) cout << b << "\n";
/*
POS : 4
POS : 3
POS : 5
POS : 2
안녕하세요
큰돌이는
킹갓제너럴
천재입니다
정말이에요!
*/
}
0
0
큰돌
지식공유자2022.05.06
안녕하세요.TG PIZZA BOY님 ㅎㅎ
일단은 알고리즘 교안을 다 외우셔야 합니다.
예를 들어.
배열 회전이다?
라고 했을 때 회전 하는 코드는 나올 정도로.
벡터다?
라고 했을 때 push_back()이나 pop_back()은 외워서 나오실 정도로 학습을 하셔야 합니다.
(그래서 보통 2주가 걸려요.)
이렇게 까지 하고 문제를 푸시는 것을 추천드리고.
문제를 푸실 때 2시간정도까지만 고민하고 그래도 안풀리신다면 답안과 강의보시면서 학습해나가시면
충분히 가능합니다.
또 질문사항있으시면 언제든 말씀 부탁드립니다.
감사합니다.
강사 큰돌 올림.
답변 3