학습/프로그래머스

[프로그래머스] 신규 아이디 추천(java)

태기 2023. 2. 15. 17:04

문제

https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=java 

 

프로그래머스

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

programmers.co.kr


나의 풀이

class Solution {
    public String solution(String new_id) {
        new_id = new_id.toLowerCase();

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

        if (new_id.length() != 0) {
            char[] char_new_id = new_id.toCharArray();
            StringBuilder sb = new StringBuilder();
            boolean dotCheck = false;
            for (char c : char_new_id) {
                if (dotCheck && c == '.') {
                    continue;
                }
                dotCheck = c == '.' ? true : false;
                sb.append(c);
            }
            new_id = sb.toString();
            
            String firstStr = new_id.substring(0, 1);
            String lastStr = new_id.substring(new_id.length() - 1, new_id.length());
            if (firstStr.equals(".")) {
                new_id = new_id.substring(1, new_id.length());
            }
            if (new_id.length() != 0 && lastStr.equals(".")) {
                new_id = new_id.substring(0, new_id.length() - 1);
            }
        }

        if (new_id.length() == 0) {
            new_id = "a";
        }

        if (new_id.length() > 15) {
            new_id = new_id.substring(0, new_id.substring(14, 15).equals(".") ? 14 : 15);
        }

        if (new_id.length() < 3) {
            String lastStr2 = new_id.substring(new_id.length() - 1, new_id.length());
            while (new_id.length() < 3) {
                new_id += lastStr2;
            }
        }

        return new_id;
    }
}

O(n), 선형