신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.
no | new_id | result |
---|---|---|
예1 | "...!@BaT#*..y.abcdefghijklm" | "bat.y.abcdefghi" |
예2 | "z-+.^." | "z--" |
예3 | "=.=" | "aaa" |
예4 | "123_.def" | "123_.def" |
예5 | "abcdefghijklmn.p" | "abcdefghijklmn" |
문제에 따라 순서대로 따라하면 함정 없이 풀이를 할수 있다.
단계 | 설명 |
---|---|
1단계 | new_id의 모든 대문자를 대응되는 소문자로 치환합니다. |
💡 | String toLowerCase()를 이용하여 소문자로 치환 |
2단계 | newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다. |
💡 | String replaceAll(정규식,치환할값) 정규식을 이용하여 제거할 문자를 공백처리 |
3단계 | new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. |
💡 | 문자열에서 '..'를 포함하지 않을때까지 (..)를 (.)로 치환 |
4단계 | new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. |
💡 | char형 배열로 idx 0과 len-1 자리의 문자가 '.'일 경우 substring(start, end)로 문자열을 자르기 -->start부터 end-1자리까지 포함한다! |
5단계 | new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다. |
💡 | 문자 길이가 0이면 빈 문자열 이므로, "a"를 대입 |
6단계 | new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. (만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.) |
💡 | 15개만큼 문자를 자른다. 마지막 문자가 (.)면 제거하도록 반복. |
7단계 | new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다. |
💡 | 길이가 3이상이 될때까지 마지막 문자를 반복하여 붙인다! |
class Solution {
public String solution(String new_id) {
String answer = "";
//1단계
answer=new_id.toLowerCase();
//2단계
String match = "[^-_.\uAC00-\uD7A3xfe0-9a-zA-Z]";
answer=answer.replaceAll(match,"");
//3단계
while(answer.contains("..")){
answer=answer.replace("..",".");
}
//4단계
if(answer.length()==1){
if(answer.toCharArray()[0]=='.'){
answer="";
}
}else{
if(answer.toCharArray()[0]=='.'){
answer=answer.substring(1);
}
if(answer.toCharArray()[answer.length()-1]=='.'){
answer=answer.substring(0,answer.length()-1);
}
}
//5단계
if(answer.length()==0){
answer="a";
}
//6단계
if(answer.length()>=16){
answer=answer.substring(0,15);
while(answer.toCharArray()[answer.length()-1]=='.'){
answer=answer.substring(0,answer.length()-1);
}
}
//7단계
if(answer.length()<=2){
while(answer.length()!=3){
answer+=answer.toCharArray()[answer.length()-1];
}
}
return answer;
}
}
- 4단계에서 문자 길이가 1일 경우에 처리하는것을 생각하지 못했다.. 첫번째 문자가 ( . )이면 두번째 문자부터 substring으로 잘라내니 문자길이가 1일 경우에 에러가 났다. 간단하게 1일때 공백 처리를 해주었다.