[프로그래머스] Lv.1 신규 아이디 추천 (Java)

subbni·2023년 1월 26일
0

프로그래머스

목록 보기
6/26
post-thumbnail
post-custom-banner

문제

나의 풀이

  • 내가 조금 헤맸던 부분은 3단계였다. 처음에 replace를 한 번만 실행해서 "..."와 같은 부분은 처음 ".."가 "."로 바뀐다 하더라도 ".."로 바뀌는 문제가 있었었다. 테스트 코드를 디버깅 하는 과정에서 다행히 이 문제를 인지해서 while문 안에 넣어 주는 것으로 해결했다.
  • 그리고 괜히 StringBuffer를 사용해서 성능을 높여보겠다고 고군분투 했으나 계속 에러가 떠서 .. 2단계를 제외하고 전부 String을 이용하는 것으로 바꿨더니 오류가 말끔하게 해결되어 허무한 감정을 느끼기도 했다 .. StringBuffer와 String간의 관계에 대해서 완벽히 이해하고 있지 못한 탓인 것 같다.
class Solution {
    public String solution(String new_id) { 
        // 1단계
        String str_id = new_id.toLowerCase();
        
        // 2단계 
        StringBuffer sb_id = new StringBuffer("");
        for(char c: str_id.toCharArray()) {
            if(((c>='a' && c<='z') || (c>='0' && c<='9') || c=='-' || c=='_' || c=='.')) {
                sb_id.append(c);
            }
        }

        //3단계 
        str_id = sb_id.toString();
        while(true) {
            if(!str_id.contains("..")){
                break;
            } 
            str_id = str_id.replace("..", ".");
        }
     
        //4단계 
        if(str_id.length()>0) {
            if(str_id.charAt(0)=='.') str_id = str_id.substring(1);
            if(str_id.length()>0 && str_id.charAt(str_id.length()-1)=='.') str_id = str_id.substring(0, str_id.length()-1);
        }
        
        // 5,6,7단계
        int length = str_id.length();
        if(length==0) { 
            str_id = "aaa";
        }else if(length>=16) { 
            if(str_id.charAt(14)=='.') {
                str_id = str_id.substring(0,14);
            } else {
                str_id = str_id.substring(0,15);
            }           
        }else if(length<3) { 
          while(str_id.length()<3) {
                str_id += str_id.charAt(str_id.length()-1);
            }
        }
        
       return str_id;
    }
}

후기

  • String의 기본 중의 기본인 substring() 메서드의 end index에 대한 이해가 부족했음을 이 문제를 통해 알 수 있었다.
    substring(start,end)에서 end가 exclusive하다는 것은 알고 있었지만, end에 해당 문자열의 길이를 넣으면 맨 마지막 문자까지 포함하여 얻을 수 있다는 것을 다시금 확인하게 되었다.
profile
개발콩나물
post-custom-banner

0개의 댓글