Level 0. 세 개의 구분자 C스타일 strtok() 함수를 이용해 해결했는데, 쓸데없이 번거롭게 푼 것 같다. #include #include #include #include using namespace std; vector solution(string myStr) { vector answer; const char *str = myStr.c_str(), *delim = "abc"; char *s = new char[strlen(str) + 1], *p; copy(str, str + strlen(str) + 1, s); p = strtok(s, delim); while (p) { answer.emplace_back(p); p = strtok(nullptr, delim); } delete s; retu..
Level 0. 문자열 여러 번 뒤집기 #include #include #include using namespace std; string solution(string my_string, vector queries) { for (vector& query : queries) reverse(my_string.begin() + query[0], my_string.begin() + ++query[1]); return my_string; }
Level 0. 전국 대회 선발 고사 1번부터 오름차순으로 배치하기 위해 map에 모든 순위와 참석 여부를 넣고 시작했다. 참석 여부는 true인 경우 인덱스를, false인 경우 -1을 넣어 구분했다. 이후, 앞에서부터 참석한 인원이 3명이 될 때까지 계산하면 된다. #include #include #include using namespace std; int solution(vector rank, vector attendance) { int answer = 0, cur = 0; int arr[] = {10'000, 100, 1}; size_t size = rank.size(); map mp; for (int i = 0; i < size; ++i) mp[rank[i]] = attendance[i] ? i..
Level 0. 빈 배열에 추가, 삭제하기 for문을 사용하지 않고 vector::insert(), vector::erase() 함수를 사용해도 된다. #include #include using namespace std; vector solution(vector arr, vector flag) { size_t size = arr.size(); vector answer; for (int i = 0; i < size; ++i) { if (flag[i]) { vector v(arr[i] * 2, arr[i]); answer.insert(answer.end(), v.begin(), v.end()); } else { answer.erase(answer.end() - arr[i], answer.end()); } }..
Level 0. 정수를 나선형으로 배치하기 인덱스 계산이 상당히 귀찮았던 문제였다. #include #include #include using namespace std; vector solution(int n) { vector answer(n, vector(n)); int num = 1; int r = 0, c = -1; for (int j = 0; j < n; ++j) answer[r][++c] = num++; while (true) { if (--n
Level 0. 배열 만들기 6 스택을 활용하는 문제다. #include #include using namespace std; vector solution(vector arr) { vector answer; for (int e : arr) if (answer.empty() || answer.back() != e) answer.emplace_back(e); else answer.pop_back(); return answer.empty() ? vector{-1} : answer; }