알고리즘
72410 신규 아이디 추천
킨글
2022. 9. 9. 17:39
문제 해석
- 주어진 조건들에 맞게 계속 필터해주면 된다.
헷갈렸던 점
- 어려운 문제는 아닌데, 조건에 맞게 필터해주는게 까다로웠다.
- if(s.length() > 0 && s.charAt(s.length()-1) == '.') 에서 ""인 경우가 있어서 에러가 나가지고 s.length > 0을 추가해주었다.
소스 코드
import java.util.*;
public class 72410 {
public static void main(String[] args) {
// solution("...!@BaT#*..y.abcdefghijklm");
// solution("z-+.^.");
solution("=.=");
solution("123_.def");
solution( "abcdefghijklmn.p");
}
public static String solution(String new_id) {
String answer = "";
String s = new_id;
s = s.toLowerCase();
StringBuffer sb = new StringBuffer();
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
int ascii = (int)c;
if(c == '-' || c == '_' || c == '.'){
sb.append(c);
}else if(ascii >= 48 && ascii <= 57){
// 숫자
sb.append(c);
}else if(ascii >= 65 && ascii <= 90){
// 대문자
sb.append(c);
}else if(ascii >= 97 && ascii <= 122){
// 소문자
sb.append(c);
}
}
// 마침표가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
s = String.valueOf(sb);
while(true){
if(!s.contains("..")) break;
s = s.replace("..", ".");
}
// 마침표가 처음이나 끝에 위치한다면 제거합니다.
if(s.charAt(0) == '.') {
s = s.substring(1, s.length());
}
if(s.length() > 0 && s.charAt(s.length()-1) == '.')
s = s.substring(0, s.length()-1);
// 빈 문자열이라면 "a"를 대입합니다.
if(s.equals(""))
s = s +"a";
// 길이가 16이상이면 15자리까지만 합니다.
if(s.length() > 15)
s = s.substring(0, 15);
// 만약 제거 후 마침표가 끝에 위치한다면 끝에 위치한 마침표 문자를 제거합니다.
if(s.charAt(s.length()-1) == '.')
s = s.substring(0, s.length()-1);
while(true){
if(s.length() > 2) break;
s = s + s.charAt(s.length()-1);
}
System.out.println(s);
return answer;
}
}