Programming Practice/PROGRAMMERS

[PG] 신규 아이디 추천 - Lv.1

Cage 2022. 6. 12. 19:14


문제

* 해당 문제의 모든 저작권은 프로그래머스 측에 있으며 본 블로그는 학업 흔적을 남겨 학업 상향을 위한 블로그로 이익을 추구하지 않으며 프로그래머스 측의 약관을 위배하지 않음을 명시합니다.*

https://programmers.co.kr/learn/courses/30/lessons/72410

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr


풀이

1레벨의 문제인만큼 단계별로 구현을 할 수 있게 친절히 설명이 적혀있습니다.

별도의 어려운 구현이 필요하지는 않으나 문자열에 대해 이해도가 부족하면 힘들 수 있겠다 싶은 문제입니다.

자기 자신의 문자열 이해도를 점검하는 좋은 문제입니다.


소스 코드

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

using namespace std;

string solution(string new_id) {
    string answer = new_id;
    int cnt = 0;
    int flag = 0;
    
    // 1단계
    for(int i = 0; i < answer.size(); i++) {
        if(answer[i] >= 65 && answer[i] <= 90)
            answer[i] += 32;
    }
    cout << "1단계 : " << answer << '\n';
    
    // 2단계
    for(int i = 0; i < answer.size(); i++) {
        if(isdigit(answer[i]) || islower(answer[i]) || answer[i] == '-' || answer[i] == '_' || answer[i] == '.')
            continue;
        else {
            answer.erase(i, 1);
            i--;
        }
    }
    cout << "2단계 : " << answer << '\n';
    
    // 3단계
    for(int i = 0; i < answer.size(); i++) {
        if(answer[i] == '.') {
            for(int j = i+1; j < answer.size(); j++) {
                if(answer[j] == '.')
                    cnt++;
                else
                    break;
            }
            answer.erase(i, cnt);
            cnt = 0;
        }
    }
    cout << "3단계 : " << answer << '\n';
    
    // 4단계
    if (answer[0] == '.')
        answer.erase(answer.begin() + 0);
    if (answer[answer.size()-1] == '.')
        answer.erase(answer.end() - 1);
     cout << "4단계 : " << answer << '\n';
    
    // 5단계
    if(answer.size() == 0) {
        answer += 'a';
    }
    cout << "5단계 : " << answer << '\n';
    
    // 6단계
    if(answer.size() >= 16) {
        answer.erase(answer.begin() + 15, answer.end());
    }
     if (answer[answer.size()-1] == '.')
        answer.erase(answer.end() - 1);
    cout << "6단계 : " << answer << '\n';
    
    // 7단계
    if(answer.size() <= 2) {
        char temp = answer[answer.size() - 1];
        while(answer.size() != 3) {
            answer += temp;
        }
    }
    cout << "7단계 : " << answer << '\n';
    
    return answer;
}