프로그래머스

[프로그래머스] 프로그래머스 Level1 신규 아이디 추천 Java (카카오 코딩테스트)

Doshisha 2022. 5. 4. 23:05

문제

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

 

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

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

programmers.co.kr

 

풀이

따로 문제를 풀기위한 알고리즘을 요구하는 문제는 아니고 문자열 + 시뮬레이션(빡구현) 문제이다.

문제의 의도대로 스텝 하나하나 잘 따라가면 크게 어렵지는 않을 것이다.

풀면서 몇가지 주의할 점은 스텝을 밟으면서 문자열의 빈번한 삭제가 일어나는데 문자열이 비었는데 문자열을 참조하려는 경우가 종종 있어서 이 부분에 대해서 항상 문자열이 비었는지 체크해주고 비었으면 무시할 수 있도록 처리해주면 된다.

또한 필자처럼 문자열 접근으로 for문 + substring 메서드를 통한 문자열 삭제를 하게 된다면 참조하려는 문자열의 인덱스가 수시로 바뀌기 때문에 문자열을 삭제한 타이밍에는 인덱스를 하나 빼주고 for문을 돌 수 있도록 해주면 된다. 

코드

import java.util.Locale;

class Solution {
    public String solution(String new_id) {

        String answer = "";

        // step1
        new_id = new_id.toLowerCase();

        // step2
        for(int i = 0; i < new_id.length(); i++) {

            char c = new_id.charAt(i);
            if(c == '.' || c == '-' || c == '_' || Character.isDigit(c) == true || Character.isLowerCase(c)) {
                continue;
            } else {
                System.out.println(c);
                new_id = new_id.substring(0,i) + new_id.substring(i+1);
                i--;
            }
        }

        // step3
        for(int i = 0; i < new_id.length() - 1; i++) {
            if(new_id.charAt(i) == '.' && new_id.charAt(i + 1) == '.') {
                if(new_id.length() > 0) {
                    new_id = new_id.substring(0,i + 1) + new_id.substring(i+2);
                    i--;
                }
            }
        }

        // step4
        if(new_id.length() > 0) {
            if(new_id.charAt(0) == '.') {
                new_id = new_id.substring(1);
            }
        }
        if(new_id.length() > 0) {
            if(new_id.charAt(new_id.length() - 1) == '.') {
                new_id = new_id.substring(0, new_id.length() - 1);
            }
        }

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

        // step6
        if (new_id.length() >= 16) {
            new_id = new_id.substring(0, 15);
            if(new_id.charAt(new_id.length() - 1) == '.') {
                new_id = new_id.substring(0, new_id.length() - 1);
            }
        }

        // step7
        if(new_id.length() <= 2) {
            while (true) {
                char c = new_id.charAt(new_id.length() - 1);
                new_id += c;
                if (new_id.length() == 3) {
                    break;
                }
            }
        }

        System.out.println(new_id);

        answer = new_id;

        return answer;
    }
}