ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 신규 아이디 추천
    Algorithm/문자열 2021. 11. 29. 16:23
    728x90

    - 카카오 2021 코딩테스트 기출문제 1번, 정답률이 57퍼정도였던 문제이다. 꼭 맞춰주어야 하는 문제이다

     

    - 먼저, 대문자를 소문자로 변환한다. 이 과정에서는 isupper, tolower 함수를 사용한다.

     

    - 다음으로, islower, isdigit을 통해 소문자, 숫자, 빼기, 밑줄, 마침표만을 추가한다.

     

    - 세 번째로, 마침표가 2번 이상 연속된 부분을 제거하는데, 이는 new_id에 하나씩 push를 하면서 new_id의 맨 마지막 글자가 '.'이고, 삽입할 글자도 '.'이라면 skip하는 식으로 구현을 한다.

     

    - 다음으로, 끝 마침표를 제거한다. 처음 마침표는 이미 전 단계에서 제거되었으므로 따로 구현할 필요가 없다.

     

    - 5단계도 쉽게 진행하면 되고, 6단계는 substr(인덱스, 추출할 문자 개수)를 통해 조건을 만족시키면 된다.

     

    - 마지막 단계도 while문과 back을 통해 쉽게 구현 해 주면 된다.

     

    #include <string>
    #include <cctype>
    using namespace std;
    
    
    string solution(string new_id) {
        string tmp ="";
        for (char &c : new_id) if (isupper(c)) c = tolower(c);
        for (char c : new_id) {
        	if(islower(x) || isdigit(x) || x == '-' || x == '_' || x == '.') tmp += c;
        }
        new_id = "";
        for (int i = 0; i < tmp.size(); i++) 
            if (tmp[i] != '.' || (!new_id.empty() && new_id.back() != '.')) new_id += tmp[i];
        if (new_id.back() == '.') new_id.pop_back();
        if (new_id.empty()) new_id.push_back('a');
        if (new_id.size() >= 16) new_id = new_id.substr(0, 15);
        while (new_id.back() == '.') new_id.pop_back();
        while (new_id.size() <= 2) new_id += new_id.back();
        return new_id;
    }

    'Algorithm > 문자열' 카테고리의 다른 글

    백준 5430 AC  (0) 2021.11.22
    [프로그래머스] 문자열 압축  (0) 2021.09.20
    [Codility - Iteration] BinaryGap  (0) 2021.09.16

    댓글

Designed by Tistory.