Notice
Recent Posts
Recent Comments
Link
투케이2K
61. (TWOK/ALGORITHM) [Java] 신규 아이디 추천 - regExp 정규식 , 삼항식 , substring , charAt 본문
투케이2K 알고리즘
61. (TWOK/ALGORITHM) [Java] 신규 아이디 추천 - regExp 정규식 , 삼항식 , substring , charAt
투케이2K 2022. 9. 6. 08:23[환경 설정 및 설명]
언 어 : Java
설 명 : 신규 아이디 추천 - regExp 정규식 , 삼항식 , substring , charAt
[소스 코드]
// TODO [solution 메소드 정의 실시]
public String solution(String new_id) {
/**
* //-------------------------------
* [신규 아이디 추천]
* //-------------------------------
* 1. 설명 : 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다
* //-------------------------------
* 2. 규칙 :
* - 아이디의 길이는 3자 이상 15자 이하여야 합니다
* - 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다
* - 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다
* //-------------------------------
* 3. 단계 :
* - 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다
* (...!@BaT#*..y.abcdefghijklm >> ...!@bat#*..y.abcdefghijklm)
*
* - 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다
* (...!@bat#*..y.abcdefghijklm >> ...bat..y.abcdefghijklm)
*
* - 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다
* (...bat..y.abcdefghijklm >> .bat.y.abcdefghijklm)
*
* - 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다
* (.bat.y.abcdefghijklm >> bat.y.abcdefghijklm)
*
* - 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다
* (bat.y.abcdefghijklm >> bat.y.abcdefghijklm)
*
* - 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
* 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다
* (bat.y.abcdefghijklm >> bat.y.abcdefghi)
*
* - 7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
* (bat.y.abcdefghi >> bat.y.abcdefghi)
* //-------------------------------
* 4. 입출력 예시 :
* - (...!@BaT#*..y.abcdefghijklm >> bat.y.abcdefghi)
*
* - (z-+.^. >> z--)
*
* - (=.= >> aaa)
* //-------------------------------
* 5. 참고 사이트 :
*
* https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=java
* //-------------------------------
* */
try {
// [1] : 모든 대문자를 대응되는 소문자로 치환
String lowerStr = new_id.toLowerCase();
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[solution() 메소드 : 1 단계 로직]");
Log.d("","\n"+"[lowerStr : "+String.valueOf(lowerStr)+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
// [2] : 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
String rexExp = "[^a-z0-9\\-\\_\\.]";
String removeData = "";
for (int i=0; i<lowerStr.length(); i++){
if (String.valueOf(lowerStr.charAt(i)).matches(rexExp)){
continue;
}
else {
removeData = removeData + String.valueOf(lowerStr.charAt(i));
}
}
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[solution() 메소드 : 2 단계 로직]");
Log.d("","\n"+"[removeData : "+String.valueOf(removeData)+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
// [3] : 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
String changeDot = removeData.replaceAll("\\.+", ".");
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[solution() 메소드 : 3 단계 로직]");
Log.d("","\n"+"[changeDot : "+String.valueOf(changeDot)+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
// [4] : 마침표(.)가 처음이나 끝에 위치한다면 제거
if (changeDot.startsWith(".")) changeDot = changeDot.substring(1, changeDot.length());
if (changeDot.endsWith(".")) changeDot = changeDot.substring(0, changeDot.length()-1);
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[solution() 메소드 : 4 단계 로직]");
Log.d("","\n"+"[changeDot : "+String.valueOf(changeDot)+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
// [5] : new_id가 전체 값이 빈 문자열이라면, new_id에 "a"를 대입
String a_String = (changeDot.length() <= 0 || changeDot == null || changeDot.isEmpty() == true) ? "a" : changeDot;
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[solution() 메소드 : 5 단계 로직]");
Log.d("","\n"+"[a_String : "+String.valueOf(a_String)+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
// [6] : new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거 / 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거
String leng_check = a_String;
if (leng_check.length() >= 16){
leng_check = leng_check.substring(0, 15);
}
leng_check = (leng_check.endsWith(".") == true) ? leng_check.substring(0, leng_check.length()-1) : leng_check;
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[solution() 메소드 : 6 단계 로직]");
Log.d("","\n"+"[leng_check : "+String.valueOf(leng_check)+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
// [7] : new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다
if (leng_check.length() <= 2){
String charData = String.valueOf(leng_check.charAt(leng_check.length()-1));
for (int i=leng_check.length(); i<3; ++i){
leng_check = leng_check + charData;
}
}
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[solution() 메소드 : 7 단계 로직]");
Log.d("","\n"+"[leng_check : "+String.valueOf(leng_check)+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
[결과 출력]
반응형
'투케이2K 알고리즘' 카테고리의 다른 글
Comments