Algorithm
프로그래머스
Python
신규 아이디 추천

신규 아이디 추천

https://school.programmers.co.kr/learn/courses/30/lessons/72410 (opens in a new tab)

풀이

이 문제에 관해서 글을 작성하는 이유는 내가 for 문을 여러번 돌리는 방향을 생각을 못했기 때문이다.

def solution(new_id):
    # 1단계
    new_id = new_id.lower()
    # 2단계
    answer = ''
    for word in new_id:
        if word.isalnum() or word in '-_.':
            answer += word
    # 3단계
    while '..' in answer:
        answer = answer.replace('..', '.')
    # 4단계
    answer = answer[1:] if answer[0] == '.' and len(answer) > 1 else answer
    answer = answer[:-1] if answer[-1] == '.' else answer
    # 5단계
    answer = 'a' if answer == '' else answer
    # 6단계
    if len(answer) >= 16:
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer[:-1]
    # 7단계
    if len(answer) <= 3:
        answer = answer + answer[-1] * (3-len(answer))
    return answer

Java 풀이

class Solution {
    public String solution(String new_id) {
        // 1단계 
        String answer = new_id.toLowerCase();
        
        // 2단계 
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < answer.length(); i++) {
            Character c = answer.charAt(i);
            Boolean a = Character.isLetterOrDigit(c);
            Boolean b = c.equals('-') || c.equals('_') || c.equals('.');
            if(a || b) {
                sb.append(c);
            }
        }
        answer = sb.toString();
        
        // 3단계
        while(answer.contains("..")) {
            answer = answer.replace("..", ".");
        }
        
        // 4단계
        if(answer.length() > 0) {
            if(answer.charAt(0) == '.') {
                answer = answer.substring(1, answer.length());
            } 
        }
        if(answer.length() > 0) {
            if(answer.charAt(answer.length() - 1) == '.') {
                answer = answer.substring(0, answer.length() - 1);
            }
        }
        
        // 5단계 
        if(answer.length() == 0 || answer == null) {
            answer = "aaa";
        }
        
        // 6단계
        if(answer.length() >= 16) {
            answer = answer.substring(0, 15);
            if(answer.charAt(answer.length() - 1) == '.') {
            	answer = answer.substring(0, 14);
            }
        }
        
        // 7단계 
        sb = new StringBuilder(answer);
        char last = answer.charAt(answer.length() - 1);
        while(sb.length() <= 2) {
            sb.append(last);
        }
        answer = sb.toString();
        
        return answer;
    }
}