https://programmers.co.kr/learn/courses/30/lessons/72410
문제 분석
- 각 단계별로 알맞게 변환한다.
- 1단계에서는 대문자를 소문자로 치환한다.
- 2단계에서는 특정 문자를 제외하고 모두 제거한다.
- 3단계에서는 .이 두번 이상 나오는 부분을 .으로 대체한다.
- 4단계에서는 .이 처음이나 끝에 위치하면 제거한다.
- 5단계에서는 빈 문자열이라면 a로 대체한다.
- 6단계에서는 15자 초과된다면 나머지 문자열을 전부 제거한다. (이때 제거후 마침표가 남아있다면 마지막 마침표를 제거한다.)
- 7단계에서는 글자가 2자 이하라면 길이가 3이 될 때까지 마지막 문자를 더해준다.
문제 풀이
1. 1단계는 toLowerCase()를 통해 대문자를 소문자로 변환해준다.
2. 2단계는 for문을 통해 알파벳 소문자, 숫자, -, _, .을 제외한 문자는 제거한다.
3. 3단계는 while문을 통해 ..을 포함하고 있다면 .으로 변경해준다.
4. 4단계는 처음과 끝의 인덱스에 .이 있다면 .을 제외하고 substring을 통해 추출한다.
5. 5단계는 길이가 0이면 a로 바꾼다.
6. 6단계는 글자가 15글자가 넘어가면 substring을 통해 15글자까지만 뽑아내고 마지막에 .이 온다면 이걸 제거해준다.
7. 7단계는 if문을 통해 글자의 길이가 2이하라면 for문을 통해 3글자가 되도록 반복한다.
8. 정답을 반환한다.
class Solution {
public String solution(String new_id) {
String answer = "";
String level1 = new_id.toLowerCase();
String level2 = "";
for(int i=0;i<level1.length();i++){
char temp = level1.charAt(i);
if((temp>='a' && temp<='z')||(temp>='0' && temp<='9')||temp=='-'||temp=='_'||temp=='.'){
level2 += temp;
}
}
String level3 = level2;
while(level3.contains("..")){
level3 = level3.replace("..", ".");
}
String level4 = level3;
if(level4.length()>0){
if(level4.charAt(0)=='.'){
level4 = level4.substring(1, level4.length());
}
}
if(level4.length()>0){
if(level4.charAt(level4.length()-1)=='.'){
level4 = level4.substring(0, level4.length()-1);
}
}
String level5 = level4;
if(level5.length()==0){
level5 = "a";
}
String level6 = level5;
if(level6.length()>15){
level6 = level6.substring(0, 15);
}
if(level6.charAt(level6.length()-1)=='.'){
level6 = level6.substring(0, level6.length()-1);
}
String level7 = level6;
if(level7.length()<=2){
for(int i=level7.length();i<3;i++){
level7 += level7.charAt(level7.length()-1);
}
}
answer = level7;
return answer;
}
}
'Algorithm > programmers' 카테고리의 다른 글
programmers 신고 결과 받기 (0) | 2022.04.10 |
---|---|
programmers 로또의 최고 순위와 최저 순위 (0) | 2022.04.10 |
programmers 숫자 문자열과 영단어 (0) | 2022.04.10 |
programmers [카카오 인턴] 키패드 누르기 (0) | 2022.03.20 |
programmers 크레인 인형뽑기 게임 (0) | 2022.03.20 |