Algorithm/programmers

[2021 카카오 블라인드]신규 아이디 추천

마닐라 2022. 2. 22. 13:48

📍 문제 설명

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

 

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

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

programmers.co.kr

 

💡 접근

입력이 1000이하로 들어와서 통과했지 아니였으면 통과하지 못했을 것 같다.

StringBuilder를 사용해도 문자열 길이를 줄이거나 삭제등의 연산이 가능하다!

 

 

👩‍💻 코드

class Solution {

    public String solution(String new_id) {
        String answer = "";

        //1
        new_id = new_id.toLowerCase();

        //2
        new_id = new_id.replaceAll("[^a-z0-9-_.]", "");

        //3
        while(true) {
            if(new_id.contains("..")) new_id = new_id.replace("..", ".");
            else break;
        }

        //4
        if(new_id.charAt(0) == '.') new_id = new_id.substring(1);
        if(new_id.length() > 0 && new_id.charAt(new_id.length()-1) == '.') new_id = new_id.substring(0, new_id.length()-1);

        //5
        if(new_id.length() == 0) new_id += "a";

        //6
        if(new_id.length() >= 16) {
            new_id = new_id.substring(0,15);
            if(new_id.charAt(new_id.length() -1) == '.') new_id = new_id.substring(0, new_id.length()-1);
        }

        while(new_id.length() <= 2) {
            new_id += new_id.charAt(new_id.length() -1);
        }

        answer = new_id;

        return answer;
    }

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.solution("=.="));
    }
}

 

import java.util.Locale;

class Solution {

    boolean isValid(char c) {
        if(Character.isLetterOrDigit(c)) return true;
        if(c == '.' || c == '_' || c == '-') return true;
        return false;
    }

    public StringBuilder solution(String new_id) {
        StringBuilder answer = new StringBuilder();

        //1,2,3, 4의 첫 '.' 제거
        boolean lastDot = false;
        for(char ch : new_id.toCharArray()) {
            //입력 불가능한 문자는 넘어가기
            if(isValid(ch) == false) continue;
            //'.'일 땐
            if(ch == '.') {
                //첫 문자이거나 이전 문자가 '.'이면 붙이지 말고 그냥 넘어가기
                if(answer.length() == 0 || lastDot) continue;
                lastDot = true;
            } else lastDot = false;

            ch = Character.toLowerCase(ch);
            answer.append(ch);
        }
        System.out.println(answer);

        //5
        if(answer.length() == 0) answer.append('a');
        System.out.println(answer);

        //6
        if(answer.length() >= 16) answer.setLength(15);
        //4의 끝문자는 어차피 여기서 제거가 된다.
        if(answer.charAt(answer.length() - 1) == '.') answer.deleteCharAt(answer.length() - 1);

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

        return answer;
    }

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.solution(".abcdefghijklmn."));
    }
}