[프로그래머스72410] 신규 아이디 추천_Java

코뉴·2021년 10월 28일
0

프로그래머스🍳

목록 보기
3/10

2021 KAKAO BLIND RECRUITMENT
https://programmers.co.kr/learn/courses/30/lessons/72410

🥚문제


🥚입력/출력


🧂아이디어

  • Java의 String, Character methods를 활용하여 문제에서 주어진 바를 구현

🍳코드

class Solution {
    public String solution(String new_id) {
        String answer;
        // 1단계
        answer = new_id.toLowerCase();
        // 2단계
        String temp = "";
        for(int i = 0; i < answer.length(); i++){
            char x = answer.charAt(i);
            if(Character.isLetter(x) || Character.isDigit(x) ||  x == '-' || x == '_' || x == '.'){
                temp += x;
            }
        }
        answer = temp;
        // 3단계
        temp = "";
        int idx = 0;
        while(idx < answer.length()){
            char x = answer.charAt(idx);
            if(x == '.'){
                int count = 0;
                // 다음 문자도 .인지 확인한다
                for(int i = idx + 1; i < answer.length(); i++){
                    if(answer.charAt(i) == '.')
                        count++;
                    else
                        break;
                }
                // count > 0이면 .가 연속해서 등장 -> 하나로 치환
                if(count > 0){
                    temp += '.';
                    // .가 등장하지 않는 지점으로 인덱스 이동
                    idx += count + 1;
                }
                // .가 하나만 등장
                else{
                    temp += x;
                    idx += 1; // 다음 인덱스 탐색
                }
            }
            else{
                temp += x;
                idx += 1; // 다음 인덱스 탐색
            }
        }
        answer = temp;
        // 4단계
        temp = "";
        if(answer.startsWith(".")){
            if(answer.length() > 1)
                temp = answer.substring(1, answer.length());
        }
        else{
            temp = answer;
        }
        
        if(answer.endsWith(".")){
            if(temp.length() > 1)
                temp = temp.substring(0, temp.length()-1);
        }
        answer = temp;
        // 5단계
        if(answer.length() == 0){
            answer += 'a';
        }
        // 6단계
        if(answer.length() >= 16){
            answer = answer.substring(0, 15);
            if(answer.endsWith("."))
                answer = answer.substring(0, answer.length() - 1);
        }
        // 7단계
        if(answer.length() <= 2){
            char x = answer.charAt(answer.length()-1);
            while(answer.length() < 3){
                answer += x;
            }
        }
        // return
        return answer;
    }
}


🍵추가

  • 프로그래머스 다른 사람 풀이, replaceAll을 사용해서 정규표현식으로 필터링한 코드가 있었음. 문제를 보자마자 정규표현식이 떠올랐지만 Java에서 어떻게 써야할지 몰라서 익숙한 방법대로 풀었는데, 이번 기회에 replaceAll 알아두기⭐
  • 항상 연습할 때, 함수를 나눠서 작성해보자!!!!
profile
코뉴의 도딩기록

0개의 댓글

관련 채용 정보