티스토리 뷰

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

 

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

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

programmers.co.kr

 

[프로그래머스][C++][Java] 신규 아이디 추천

 

C++로 그냥 그대로 구현했다가 자바로 풀면 좀 편하지 않을까 했는데

정규표현식을 쓰면 완전 간단하게 나온다.

 

 

C++

#include <string>

using namespace std;

void level1(string &new_id) {
        for (char &c : new_id) {
                if ('A' <= c && c <= 'Z') {
                        c = c - 'A' + 'a';
                }
        }
}

void level2(string &new_id) {
        for (int i = 0; i < new_id.length(); i++) {
                if ('0' <= new_id[i] && new_id[i] <= '9') continue;
                if ('A' <= new_id[i] && new_id[i] <= 'Z') continue;
                if ('a' <= new_id[i] && new_id[i] <= 'z') continue;
                if (new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.') continue;
                new_id.erase(new_id.begin() + i);
                i--;
        }
}

void level3(string &new_id) {
        for (int i = 0; i < new_id.length() - 1; i++) {
                if (new_id[i] == '.' && new_id[i + 1] == '.') {
                        new_id.erase(new_id.begin() + i + 1);
                        i--;
                }
        }
}

void level4(string &new_id) {
        if (!new_id.empty() && new_id.front() == '.') {
                new_id.erase(new_id.begin());
        }
        if (!new_id.empty() && new_id.back() == '.') {
                new_id.erase(new_id.end() - 1);
        }
}

void level5(string &new_id) {
        if (new_id.empty()) {
                new_id.append("a");
        }
}

void level6(string &new_id) {
        if (new_id.length() >= 16) {
                new_id.erase(new_id.begin() + 15, new_id.end());
        }
        if (!new_id.empty() && new_id.back() == '.') {
                new_id.erase(new_id.end() - 1);
        }
}

void level7(string &new_id) {
        while (new_id.length() <= 2) {
                new_id.push_back(new_id.back());
        }
}

string solution(string new_id) {
        level1(new_id);
        level2(new_id);
        level3(new_id);
        level4(new_id);
        level5(new_id);
        level6(new_id);
        level7(new_id);

        return new_id;
}

 

 

Java

class Solution {
    public String solution(String new_id) {
        String answer = "";
        // level1
        new_id = new_id.toLowerCase();

        // level2
        for (int i = 0; i < new_id.length(); i++) {
            char c = new_id.charAt(i);
            if ('0' <= c && c <= '9') answer += c;
            else if ('A' <= c && c <= 'Z') answer += c;
            else if ('a' <= c && c <= 'z') answer += c;
            else if (c == '-' || c == '_' || c == '.') answer += c;
        }

        // level3
        while (answer.contains(".."))
            answer = answer.replace("..", ".");

        // level4
        if (answer.startsWith("."))
            answer = answer.substring(1);
        if (answer.endsWith("."))
            answer = answer.substring(0, answer.length() - 1);

        // level5
        if (answer.isEmpty())
            answer = "a";

        // level6
        if (answer.length() >= 16) {
            answer = answer.substring(0, 15);
            if (answer.endsWith("."))
                answer = answer.substring(0, answer.length() - 1);
        }

        // level7
        if (answer.length() <= 2) {
            char c = answer.charAt(answer.length() - 1);
            while (answer.length() < 3)
                answer += c;
        }

        return answer;
    }
}

 

 

정규표현식

class Solution {
    public String solution(String new_id) {
        String answer = new_id.toLowerCase(); // 1
        answer = answer.replaceAll("[^-_.a-z0-9]", ""); // 2
        answer = answer.replaceAll("[.]{2,}", "."); // 3
        answer = answer.replaceAll("^[.]|[.]$", "");    // 4

        if (answer.isEmpty()) {    // 5
            answer += "a";
        }

        if (answer.length() >= 16) {     // 6
            answer = answer.substring(0, 15);
            answer = answer.replaceAll("[.]$","");
        }

        if (answer.length() <= 2) {		// 7
            char c = answer.charAt(answer.length() - 1);
            while (answer.length() < 3)
                answer += c;
        }

        return answer;
    }
}
댓글