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

Bluewave·2024년 7월 25일

코테공부_java

목록 보기
42/99

문제

☁ 문제 바로가기

문제레벨정답률
신규 아이디 추천Lv.151%

My Code

class Solution {
    public String solution(String new_id) {
        String lowerStr = "";
        String secondStr = "";
        String thirdStr = "";
        String fourthStr = "";
        String fifthStr = "";
        String sixthStr = "";

        
        //1단계
        for(int i = 0; i<new_id.length(); i++){
            if(Character.isUpperCase(new_id.charAt(i))){
                lowerStr += Character.toLowerCase(new_id.charAt(i));
            } else{
                lowerStr += new_id.charAt(i);
            }
        }
        
        //2단계
        for(int i = 0; i<lowerStr.length(); i++){
            if(lowerStr.charAt(i) == '-' || lowerStr.charAt(i) == '_' || 
               lowerStr.charAt(i) == '.' || Character.isDigit(lowerStr.charAt(i))){
                secondStr = lowerStr.substring(0, i) + lowerStr.substring(i, lowerStr.length()-1);
            }
        }
        
        //3단계
        for(int i = 0; i<secondStr.length() - 1; i++){
            if(secondStr.charAt(i) == '.' && secondStr.charAt(i + 1) =='.'){
                secondStr = secondStr.substring(0, i) + secondStr.substring(i, lowerStr.length()-1);
            }
        }
        
        //4단계
        if(thirdStr.charAt(0) == '.' && thirdStr.length() > 0){
            fourthStr = fourthStr.substring(0, 1);
        } else if(thirdStr.charAt(thirdStr.length() - 1) == '.'){
            fourthStr = fourthStr.substring(0, 0);
        }
        
        //5단계
        if(fourthStr.isEmpty()){
            fifthStr = "a";
        } else{
            
        }
        
        //6단계
        if(fifthStr.length() >= 16){
            sixthStr = fifthStr.substring(0,16);
        }
        
        //7단계
        if(sixthStr.length() <= 2 && thirdStr.length() > 0){
            char lastChr = sixthStr.charAt(sixthStr.length()-1);
            while(sixthStr.length()<3){
                sixthStr += lastChr;
            }
        }
        
        return sixthStr;
    }
}

** 불통과 코드

개선 코드

class Solution {
    public String solution(String new_id) {
        String lowerStr = "";
        String secondStr = "";
        String thirdStr = "";
        
        // 1단계: 대문자를 소문자로 변환
        for (int i = 0; i < new_id.length(); i++) {
            char c = new_id.charAt(i);
            if (Character.isUpperCase(c)) {
                lowerStr += Character.toLowerCase(c);
            } else {
                lowerStr += c;
            }
        }
        
        // 2단계: 알파벳 소문자, 숫자, -, _, .를 제외한 모든 문자 제거
        for (int i = 0; i < lowerStr.length(); i++) {
            char c = lowerStr.charAt(i);
            if (Character.isLowerCase(c) || Character.isDigit(c) || c == '-' || c == '_' || c == '.') {
                secondStr += c;
            }
        }

        // 3단계: 연속된 점을 하나의 점으로 변환
        boolean wasDot = false;
        for (int i = 0; i < secondStr.length(); i++) {
            char c = secondStr.charAt(i);
            if (c == '.') {
                if (!wasDot) {
                    thirdStr += c;
                    wasDot = true;
                }
            } else {
                thirdStr += c;
                wasDot = false;
            }
        }

        // 4단계: 처음이나 끝에 위치한 점 제거
        if (thirdStr.length() > 0 && thirdStr.charAt(0) == '.') {
            thirdStr = thirdStr.substring(1);
        }
        if (thirdStr.length() > 0 && thirdStr.charAt(thirdStr.length() - 1) == '.') {
            thirdStr = thirdStr.substring(0, thirdStr.length() - 1);
        }

        // 5단계: 빈 문자열이면 "a"로 변경
        if (thirdStr.isEmpty()) {
            thirdStr = "a";
        }

        // 6단계: 길이가 16자 이상이면 첫 15개의 문자를 제외한 나머지 제거
        if (thirdStr.length() > 15) {
            thirdStr = thirdStr.substring(0, 15);
            // 끝에 위치한 점 제거
            if (thirdStr.charAt(thirdStr.length() - 1) == '.') {
                thirdStr = thirdStr.substring(0, thirdStr.length() - 1);
            }
        }

        // 7단계: 길이가 2자 이하라면 마지막 문자를 길이가 3이 될 때까지 반복
        while (thirdStr.length() < 3) {
            thirdStr += thirdStr.charAt(thirdStr.length() - 1);
        }

        return thirdStr;
    }
}

substring 억지로 쓰려고 하지 말고, 쉽게 풀 수 있는건 쉽게 풀자..!
굳이 substring 안써도 그냥 붙이기만 하면 됨 ㅇㅇ
for (int i = 0; i < lowerStr.length(); i++) { char c = lowerStr.charAt(i); if (Character.isLowerCase(c) || Character.isDigit(c) || c == '-' || c == '_' || c == '.') { secondStr += c; } }
이런 식으로 굳이 문자열과 문자열을 붙이지 않아도 쉽게 해결할 수 있으니 쉽게 쉽게 생각하기,,

profile
Developer's Logbook

0개의 댓글