Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

Algorithm

Programmers Level1. 신규 아이디 추천 (java)

Kellyyyy 2021. 4. 21. 21:42

접근 방법

  • 다소 무식하게 toCharArray()를 사용해서 new_id를 배열로 만들어준 후, 아스키코드와 for문을 돌려서 주어진 조건을 확인했다.
  • 다른 풀이를 보니 replaceAll()과 정규식을 사용해서 매우 간단하게 처리했다.

소스 코드 1 - 아스키 코드를 사용한 방법

class Solution1 {
    public static String solution(String new_id) {
        String answer = new_id;
        answer = step_1(answer);
        //System.out.println("answer = " + answer);
        answer = step_2(answer);
        //System.out.println("answer = " + answer);
        answer = step_3(answer);
        //System.out.println("answer = " + answer);
        answer = step_4(answer);
        //System.out.println("answer = " + answer);
        answer = step_5(answer);
        //System.out.println("answer = " + answer);
        answer = step_6(answer);
        //System.out.println("answer = " + answer);
        answer = step_7(answer);
        //System.out.println("answer = " + answer);

        return answer;
    }

    private static String step_7(String answer) {
        if (answer.length() <= 2) {
            //System.out.println("answer : " + answer);
            //System.out.println("char : " + answer.charAt(answer.length()-1));
            answer = String.format("%-3s", answer).replace(' ', answer.charAt(answer.length() - 1));
        }
        return answer;
    }

    private static String step_6(String answer) {
        if (answer.length() >= 16) {
            answer = answer.substring(0, 15);
        }
        if (answer.endsWith(".")) {
            answer = answer.substring(0, 14);
        }
        return answer;
    }

    private static String step_5(String answer) {
        if (answer.equals("")) {
            answer = "a";
        }
        return answer;
    }

    private static String step_4(String answer) {
        char[] cAnswer = answer.toCharArray();
        if (cAnswer[0] == '.') {
            cAnswer[0] = '*';
        }
        if (cAnswer[cAnswer.length - 1] == '.') {
            cAnswer[cAnswer.length-1] = '*';
        }
        return String.valueOf(cAnswer).replace("*", "");
    }

    private static String step_3(String answer) {
        char[] cAnswer = answer.toCharArray();
        for (int i = 0; i < cAnswer.length-1; i++) {
            if (cAnswer[i] == '.' && cAnswer[i + 1] == '.') {
                cAnswer[i] = '*';
            }
        }
        return String.valueOf(cAnswer).replace("*", "");
    }

    private static String step_2(String answer) {
        char[] cAnswer = answer.toCharArray();
        for (int i = 0; i < cAnswer.length; i++) {
            int cNum = (int) cAnswer[i];
            if (cNum >= 97 && cNum <= 122) continue;
            if (cNum == 45 || cNum == 95 || cNum == 46) continue;
            if (cNum >= 48 && cNum <= 57) continue;
            cAnswer[i] = '*';
        }
        return String.valueOf(cAnswer).replace("*","");
    }

    private static String step_1(String answer) {
        return answer.toLowerCase();
    }
}

소스 코드 2 - 정규식 사용

class Solution2 {
    public static String solution(String new_id) {
        String answer = "";
        String temp = new_id.toLowerCase();
        temp = temp.replaceAll("[^-_.0-9a-z]", "");
        temp = temp.replaceAll("[.]{2,}", ".");
        temp = temp.replaceAll("^[.]|[.]$", "");
        if (temp.equals("")) temp += "a";
        if (temp.length() >= 16) {
            temp = temp.substring(0, 15);
            temp = temp.replaceAll("[.]$", "");
        }
        if (temp.length() <= 2) {
            while (temp.length() < 3) {
                temp += temp.charAt(temp.length() - 1);
            }
        }
        answer += temp;
        return answer;
    }
}

출처

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

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr