알고리즘

프로그래머스 신규 아이디 추천(JAVA)

박카스마시며코딩 2021. 12. 26. 21:42

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

 

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

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

programmers.co.kr

 

저는 StringBuilder를 사용하여 문제를 해결하였습니다. 자바의 경우 String이 불변의 속성을 가지고 있기 때문에 문자열의 수정이 많은 경우, 계속 새로운 메모리를 소모하게 됩니다. 그래서 가변성이 있는 StringBuilder를 사용하였습니다.

StringBuilder는 StringBuffer에서 동기화 기능이 빠져있기 때문에 단일 쓰레드 환경에서 빠른 것으로 알고 있습니다.

 

 

import java.util.*;
class Solution {
    public String solution(String new_id) {
        String answer = "";
        StringBuilder sb = new StringBuilder(new_id.toLowerCase()); // 1단계
        for(int i = 0 ; i < sb.length() ; i++){ // 2단계
            char now = sb.charAt(i);
            if((now >= 'a' && now <= 'z') || (now >= '0' && now <= '9')
              || now == '-' || now == '_' || now == '.'){
                
            }else{
                sb.deleteCharAt(i);
                i--;
            }
        }
        boolean flag = false;
        for(int i = 0 ; i < sb.length() ; i++){ // 3단계
            char now = sb.charAt(i);
            if(now == '.' && flag){
                sb.deleteCharAt(i--);
            }else if(now == '.'){
                flag = true;
            }else{
                flag = false;
            }
        }
        if(sb.length() > 0 && sb.charAt(0) == '.'){ // 4단계
            sb.deleteCharAt(0);
        }
        if(sb.length() > 0 && sb.charAt(sb.length()-1) == '.'){
            sb.deleteCharAt(sb.length() -1);
        }
        if(sb.length() == 0){ // 5단계
            sb.append('a');
        }
        if(sb.length() >= 16){ // 6단계
            sb.setLength(15);
            if(sb.charAt(sb.length()-1) == '.'){
            sb.deleteCharAt(sb.length() -1);
            }
        }
        while(sb.length() <= 2){
            sb.append(sb.charAt(sb.length()-1));
        }
        answer= sb.toString();
        return answer;
    }
}