이번에는 2022년 11월 26일 카카오 모빌리티 2022년도 하반기 1차 코딩테스트에서 사용했던 개념들을 정리해보려 합니다.
테스트케이스는 모두 통과시켰으나, 문제의 정답 여부는 알 수가 없어서 결과는 나와봐야 알 것 같지만 난이도 자체는 쉬웠던(?) 것 같습니다.
특히 파이썬을 사용한다면, 쉽게 해결 가능한 문제들이었던 것 같습니다.
String compare
C++에서 string type 변수, 즉 문자열을 비교하기 위해서는 compare method를 사용합니다.
위와 같이 compare method를 사용하면, 출력 결과는 다음과 같습니다.
이 결과로 compare method를 사용하면 두 문자열이 같은 경우에는 0을 반환합니다.
만약 두 문자열이 다르다면, 사전적인 비교를 통해 method를 호출하는 string 객체에 저장된 값이 사전적으로 앞서 있는 경우 -1을 사전적으로 뒤에 있는 경우 1을 반환하는 방식으로 동작하는 method입니다.
사전적 순서 | str1.compare(str2) 반환 값 |
str1 > str2 | 1 |
str1 == str2 | 0 |
str1 < str2 | -1 |
물론, 위 예시 코드에서 사용한 바와 같이 '==' operator를 사용해 같은지 여부를 판단할 수도 있습니다만, 차이점은 '==' 연산자의 경우에는 같으면 1을 반환하고, 같지 않으면 0을 반환한다는 차이점이 있습니다.
C++에서의 string split
c++로 알고리즘 문제풀이를 할 때, 다른 언어에 비해 까다로운 점 중 하나가, string을 delimeter에 따라 잘라주는 method가 없다는 점입니다.
그래서 split 함수를 직접 짜서 사용해야 하는데, 이번 코테에서도 활용하게 되어서 간단하게 정리해봅시다!
제가 C++ 언어를 이용해 작성해본 string type 변수를 구분자를 기준으로 나눠주는 split 함수를 구글링 결과 다양한 소스를 참고해서 짜 본 코드는 위와 같습니다.
물론, C에 구현되어 있는 char type 문자열을 split하는 strtok 함수도 있지만, 이 함수는 string type에는 지원되지 않기 때문에 C++ 언어를 이용한 코딩테스트를 준비하시는 분들은 대략 위와 같은 형태의 코드를 암기하고 계신 것 같습니다.
위 코드에서 핵심은 sstream이라는 것을 활용한다는 점인데, 우선 sstream은 string stream의 약자를 의미하며, 간단히 정리하자면, 문자열을 stream 처럼 사용할 수 있도록 돕는 라이브러리입니다.
그렇기 때문에, getline 함수를 이용하여 delimeter를 기준으로 원본 문자열을 잘라 tmp string type 변수에 넣는 방식으로 잘라 vector에 저장할 수 있었습니다.
자세한 내용 정리는 나중에 기회가 된다면, 해보려고 합니다!
소스 코드 참고용
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
vector<string> split(string str, char delimeter) {
stringstream ss(str);
string tmp;
vector<string> result;
while (getline(ss, tmp, delimeter)) {
// delimeter를 구분자로 하여 잘린 sub string tmp를 vector에 push한다.
result.push_back(tmp);
}
// split result를 반환
return result;
}
int main() {
string test_input = "hi,hello,who,are,you";
vector<string> split_result = split(test_input, ',');
// 결과를 출력해봅시다.
for (string it : split_result) {
cout << it << endl;
}
return 0;
}
'Algorithm > PS' 카테고리의 다른 글
BOJ - 14002번, 가장 긴 증가하는 부분 수열 4 문제, LIS 예제와 DP 풀이 (0) | 2022.12.28 |
---|---|
BOJ - 2294번 동전 2 문제풀이 (DP, SET 사용) (0) | 2022.12.28 |
백준 - 5014번, 스타트링크 문제, BFS 방식 풀이 정리 (C++) (0) | 2022.11.09 |
백준 - 11048번, 이동하기 문제 BFS및 Dynamic programming 풀이 (C++) (0) | 2022.10.31 |
백준 - 12100번 2048 - easy 문제 풀이 정리 (0) | 2022.10.13 |
댓글