티스토리 뷰

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2021 KAKAO BLIND RECRUITMENT Level 1 문제다.

 

 

정규 표현식을 잘 몰라서 지저분하게 코드를 작성했다.

Level 1이기 때문에 딱히 설명할 것 없이 코드를 보면 이해가 된다.

 

for문으로 하나하나 다 탐색해 숫자, 영어, -, _, . 이외의 문자가 들어올 경우

일단 *로 치환하고, 나중에 String의 replaceAll을 통해서 *를 ""(빈 문자열)로 없앴다.

 

StringBuilder와 String을 번갈아서 사용한 이유는

String에는 특정 인덱스의 문자를 다른 문자로 교체해주는 기능의 메소드가 존재하지 않고, (StringBuilder의 setCharAt)

StringBuilder에는 특정 문자를 다른 문자로 교체해주는 기능의 메소드가 존재하지 않아서였다. (String의 replaceAll)

 

지저분한 코드를 제출하고 다른 분들의 코드를 보니,

정규표현식을 사용하면 깔끔하게 코드를 작성할 수 있다는 걸 깨달았다.

문자열 관련 문제를 풀때 유용하게 쓰일 것 같으니

자주 쓰이는 건 꼭 익혀둬야겠다! (아래 링크는 나중에 다시 보려고..)

 

https://hbase.tistory.com/160

 

[Java] 정규표현식 사용법 및 예제 - Pattern, Matcher

자바에서 정규표현식(Regular Expression)'을 사용해보자. 1. 정규표현식(Regular Expression) 정규표현식 혹은 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어다. 정규 표현식은

hbase.tistory.com

 

class Solution {
    public String solution(String new_id) {
        // 1단계
        String ans = new_id.toLowerCase();
        
        StringBuilder sb = new StringBuilder(ans);
        
        for(int i=0;i<sb.length();i++) {
            char c = sb.charAt(i);
            // 2단계
            if((c < 'a' || c > 'z') && (c < '0' || c > '9') && c != '-' && c != '_' && c != '.')
                sb.setCharAt(i, '*');
        }
        
        ans = sb.toString().replaceAll("\\*", "");
    
        // 3단계
        ans = ans.replaceAll("\\.{2,}", "\\.");
        
        sb.setLength(0);
        sb.append(ans);
        
        // 4단계
        if(sb.charAt(0) == '.')
            sb.setCharAt(0, '*');
        if(sb.charAt(sb.length() - 1) == '.')
        	sb.setCharAt(sb.length() - 1, '*');
        
        ans = sb.toString().replaceAll("\\*", "");
        
        sb.setLength(0);
        sb.append(ans);
        
        // 5단계
        if(sb.length() == 0) 
            sb.append("a");
        // 6단계
        else if(sb.length() >= 16) {
            sb.setLength(15);
            if(sb.charAt(sb.length() - 1) == '.')
                sb.setCharAt(sb.length() - 1, '*');
            
            sb = new StringBuilder(sb.toString().replaceAll("\\*", ""));
        }
        // 7단계
        if(sb.length() <= 2)
            while(sb.length() < 3)
                sb.append(sb.charAt(sb.length() - 1));
        
        return sb.toString();
    }
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함