본문 바로가기
코테준비/하루한개도전~

99클럽 코테 스터디 3일차 TIL : 문자열 내 마음대로 정렬하기

by 움바둠바 2024. 7. 24.
728x90

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

 

프로그래머스

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

programmers.co.kr

 

문자열 정렬기준을 마음대로 설정해보는 문제였다!

문제 자체는 간단했다.

편하게 풀려면 그냥 sort자체를 구현해주면 될것같고

나는 <algoritm> 헤더의 sort를 이용해줬다.

 


#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int forn;

bool comp(string a, string b){
    if(a[forn] < b[forn]){
        return true;
    }else if(a[forn] == b[forn]){
        return a < b;
    }
    return false;
}

vector<string> solution(vector<string> strings, int n) {
    vector<string> answer = strings;
    forn = n;
    
    sort(answer.begin(), answer.end(), comp);
    
    
    return answer;
}

내가 커스텀한 compare함수의 인자는 정해져있기 때문에, n을 인자로 넘겨주는게 아니라 전역변수로 넘겨서 처리했다.

 

algorithm헤더의 sort함수는, 맨 마지막 인자를 설정해주지 않으면 자동으로 오름차순으로 정렬된다.

따로 커스텀한 compare를 적용해주고싶으면, 위와같이 bool을 리턴하는 compare함수를 직접 정의해서 넘겨주면 된다.

 


오늘도 미들러문제를 생각보다 쉽게풀어서 챌린저문제를 도전해봤다!

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

 

프로그래머스

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

programmers.co.kr

이 문제도 생각보다 쉬웠다ㅎㅎ

 

#include <string>
#include <vector>
#include <iostream>
#include <map>

using namespace std;



int solution(string s) {
    int answer = 0;

    map<string, int> numbers = {{"zero" , 0}, {"one" , 1}, {"two" , 2}, {"three" , 3} ,{"four" , 4}, {"five" , 5}, {"six" , 6}, {"seven" , 7}, {"eight" , 8}, {"nine" , 9}};
        
    
    string str;
    string temp;
    for(int i = 0; i<s.size(); i++){
        if(isdigit(s[i])){
            str.push_back(s[i]);
            continue;
        }
        temp.push_back(s[i]);
        if ( numbers.find(temp) == numbers.end() ) {
        } else {
            // find
            int tnum = numbers[temp];
            char tchar = '0' + tnum;
            str.push_back(tchar);
            temp.clear();
        }
    }
    
    answer = stoi(str);
    
    return answer;
}

 

일단, 문자열별로 어떤 숫자로 매칭되는지 나와있으니까 hash를 이용할 수 있었다!

나는 Map이 있어서 그냥 그걸로 사용했다.

hash_map 헤더를 이용하면 hash를 이용할 수 있지만,, 그냥 익숙한걸로 사용했다ㅋㅋㅋ

 

아무튼, 주어진 문자열을 하나씩 탐색하면서 숫자가 나오면 건너뛰고, 문자열이 나오면 대응되는 숫자로 변경해나가면서 진행했다.

마지막에는 이렇게 바꾼 문자열을 stoi함수를 이용해 변경해주기만 하면 되었다!

728x90