본문 바로가기
알고리즘 문제/프로그래머스

[프로그래머스 - Java] 신규 아이디 추천 (2021 KAKAO BLIND RECRUITMNET)

by 건복치 2021. 1. 29.
반응형

문제

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

 

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

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

programmers.co.kr

전체 코드

문제에서 요구하는 7단계에 따라 문자열 메소드를 잘 이용해 처리하면 된다.

코드에 단계별로 주석을 달아놓았다.

 

class Solution {
    public String solution(String new_id) {
		// 1. 소문자로 변경
		new_id = new_id.toLowerCase();

		// 2. 소문자 숫자 -_. 제외한 모든 문자 제거 
		String id = "";
		for(int i = 0; i < new_id.length(); i++) {
			char ch = new_id.charAt(i);

			if(ch >= 'a' && ch <= 'z') {
				id += String.valueOf(ch);
			} else if(ch >= '0' && ch <= '9') {
				id += String.valueOf(ch);
			} else if(ch == '.' || ch == '-' || ch == '_') {
				id += String.valueOf(ch);
			}
		}

		// 3. . 하나만 
		for(int i = 0; i < id.length(); i++) {
			if(id.charAt(i) == '.') {
				int j = i+1;
				String dot = ".";

				while(j != id.length() && id.charAt(j) == '.') {
					dot += ".";
					j++;
				}

				if(dot.length() > 1)
					id = id.replace(dot, ".");
			}
		}

		// 4. 첫번째, 마지막 . 제거
		if(id.startsWith(".") ) {
			id = id.substring(1, id.length());
		} else if(id.endsWith(".")) {
			id = id.substring(0, id.length()-1);
		}

		// 5. 빈 문자열이라면 a 대입 
		if(id.length() == 0) {
			id += "a";
		}

		// 6. 16자 이상이면, 15자만 남김 
		if(id.length() >= 16) {
			id = id.substring(0, 15);
		}
        
		// 마지막 . 제거 
		if(id.endsWith(".")) {
			id = id.substring(0, id.length()-1);
		}

		// 7. 2자 이하라면, 마지막 문자 길이 3까지 반복해서 붙임 
		String last = id.charAt(id.length()-1) + "";
		if(id.length() == 2) {
			id = id + last;
		} else if(id.length() == 1) {
			id = id + last + last;
		}

		return id;
    }
}

 

다른 사람의 풀이를 봤는데, 정규식을 이용해 엄청 간결하게 구현할 수 있었음!

그래서 정규식을 이용해 새로 푼 코드 

 

class Solution {
    public String solution(String new_id) {
        String id = new_id.toLowerCase(); // 소문자로 
        id = id.replaceAll("[^-_.a-z0-9]", ""); //-_. 영문자 숫자만 남김 
        id = id.replaceAll("[.]{2,}", "."); // .2개 이상 .으로 
        id = id.replaceAll("^[.]|[.]$", ""); // 처음과 끝 . 제거 

        if(id.equals("")) // 빈 문자열이라면 a 추가 
            id += "a";
            
        if(id.length() >= 16){ // 16자 이상이면 15자로 
            id = id.substring(0, 15);
            id = id.replaceAll("^[.]|[.]$", ""); // 끝 . 제거 
        }
        if(id.length() <= 2) // 2자 이하라면 3자까지 마지막 문자추가 
            while(id.length() < 3)
                id += id.charAt(id.length() - 1);

        return id;
    }
}

GITHUB

 

 

KwonMinha/Programmers

Programmers Algoritm. Contribute to KwonMinha/Programmers development by creating an account on GitHub.

github.com

 

 

반응형

댓글