알고리즘/알고리즘 이론, 템플릿

c++ 문자열 slicing 및 파싱

b1ackhand 2023. 3. 14. 14:30

https://school.programmers.co.kr/learn/courses/30/lessons/72412

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2021 카카오 코딩테스트 문제

 

이 문제 해결한 후 다른 사람의 풀이를 보고 깨달은 점 정리

 

["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"]

 

이 문제 같은 경우에는 입력이 위와 같이 연속된 string으로 들어오기 때문에 문자열을 파싱하는것 부터 시작한다.

따라서 나는 이문제를

struct person{
    string language;
    string jeak;
    string career;
    string soulfood;
    int score;
};

for(int i = 0;i < info.size();i++)
    {
        person p;
        string cur = info[i];

        int cut = cur.find(' ');        
        p.language = cur.substr(0,cut);
        cur = cur.substr(cut+1);

        cut = cur.find(' ');
        p.jeak = cur.substr(0,cut);
        cur = cur.substr(cut+1);

        cut = cur.find(' ');
        p.career = cur.substr(0,cut);
        cur = cur.substr(cut+1);

        cut = cur.find(' ');
        p.soulfood = cur.substr(0,cut);
        cur = cur.substr(cut+1);

        cut = cur.find(' ');
        p.score = stoi(cur.substr(0,cut));        

        string hash = p.language+ p.jeak + p.career + p.soulfood;  
        m[hash].push_back(p.score);
      
    }

이런 식으로 무식하게 파싱을 했다.

 

아래 부분은 hash를 만들어서 map에 저장하는 부분이다.

parsing을 split(' ')와 substr()을 이용하여 하였는데

다른 풀이에는 istringstream 이라는 걸 사용하는 풀이가 있었다.

 

string key[4], tmp;
int point;

for (auto& inf : info) 
{
    istringstream iss(inf);
    iss >> key[0] >> key[1] >> key[2] >> key[3] >> point;
}

해당 테크닉은 string 파싱 할때 잘 사용될만한 테크닉인 것같다.

사용법을 잘 익혀두자

 

 

'알고리즘 > 알고리즘 이론, 템플릿' 카테고리의 다른 글

MST - Kruskal  (0) 2023.04.03
O(nlogn) LIS  (0) 2023.03.28
shift 연산과 오버플로우  (0) 2023.03.06
에라토스테네스의체  (0) 2023.01.25
컨벡스헐  (0) 2023.01.15