🔗 문제 링크
📖 풀이 과정
- 조건에 충족하게 구현하는 문제입니다.(카카오 기출 문제입니다.)
- 조건을 보시면 조건 1부터 4는 문자열이 있을 때의 조건입니다. 조건 5부터는 문자열이 없을 경우를 대비한 것이구요.
- 그러므로 저는 조건 1 이전에 문자열이 있을 경우라는 조건문을 추가했습니다.
- 조건 1
- 소문자로 치환하는 부분이기에 toLowerCase() 메소드를 사용하면 됩니다.
- 조건 2
- "~~를 제외한 모든 문자를 제거한다" 이지만 ~~를 제외한 조건은 너무나 많습니다.
- 그렇기에, 반대로 생각해서 ~~라는 조건에 해당하는 문자열만 따로 빼내면 됩니다.
- 조건 3
- 마침표가 2번이면 1개로 변경해야 합니다.
- contains()메소드를 사용하면 됩니다. 하지만, 바꾼 이후에 또 남아있을 수도 있기에 while()반복문을 이용합니다.
- 조건 4
- 마침표 처음과 끝의 마침표를 제거하면 됩니다.
- 조건 5
- 빈 문자열일 경우 'a' 추가합니다.
- 조건 6
- 길이에 맞게 문자열을 자릅니다.(substring() 이용)
- substring() 메소드를 이용하면 반환값이 문자열입니다. 그러므로 StrinigBuffer를 새로 생성합니다.
- 조건 7
- while 반복문을 이용하여 반복하여 끝 문자열을 추가합니다.
💻 코드
class Solution {
public String solution(String new_id) {
// 1. 모든 문자를 소문자로 치환
new_id = new_id.toLowerCase();
// 2. 알파벳 소문자, 숫자, 빼기, 밑줄, 마침표를 제외한 모든 문자 제거
// 제거를 하려하면 조건을 추가해야 하는 경우가 너무 많음 -> 위 조건에 맞는 것만 따로 보관
StringBuffer sb = new StringBuffer();
if(new_id.length() > 0){
for(int i = 0; i< new_id.length(); i++){
char ch = new_id.charAt(i);
if(ch >= 'a' && ch <= 'z'){
sb.append(ch);
}else if(ch >= '0' && ch <= '9'){
sb.append(ch);
}else if(ch == '-' || ch == '_' || ch == '.'){
sb.append(ch);
}
}
// 3. 마침표가 2번 이상 연속되면 하나로 치환한다.
String temp = sb.toString();
while(temp.contains("..")){
temp = temp.replace("..",".");
}
sb = new StringBuffer(temp);
// 4. 마침표 처음이나 끝에 위치한다면 제거
if(sb.length() > 0){
if(sb.charAt(0) == '.'){
sb.deleteCharAt(0);
}
}
if(sb.length() > 0 ){
if(sb.charAt(sb.length() - 1) == '.'){
sb.deleteCharAt(sb.length() - 1);
}
}
}
// 5. new_id가 빈문자열이면 'a' 대입
if(sb.length() == 0){
sb.append("a");
}
// 6-1. 길이가 16자 이상이면, 15개만 자르기
if(sb.length() >= 16){
sb = new StringBuffer(sb.substring(0,15));
}
// 6-2. 마침표가 끝에 있으면 마침표 제거
if(sb.charAt(sb.length() - 1) == '.'){
sb.deleteCharAt(sb.length() - 1);
}
// 7. 길이가 2자 이하이면, 마지막 문자를 길이가 3이 될때까지 반복해서 끝에 붙이기
while(sb.length() <= 2){
sb.append(sb.charAt(sb.length() - 1));
}
return sb.toString();
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 숫자 문자열과 영단어 (Java) (0) | 2022.02.15 |
---|---|
프로그래머스 : 신고 결과 받기 (Java) (0) | 2022.02.15 |
프로그래머스 : 로또의 최고 순위와 최저 순위 (Java) (0) | 2022.02.12 |
프로그래머스 : 소수 찾기 (Java) (0) | 2022.02.12 |
프로그래머스 : 나머지가 1이 되는 수 찾기 (Java) (0) | 2022.02.12 |