프로그래머스 - 신규 아이디 추천 (Level 1)
2024. 1. 4. 21:57ㆍ코딩테스트 정리(자바)
728x90
나의 풀이
import java.util.*;
public class Solution{
public String solution(String new_id) {
String answer="";
//1. 소문자로 치환
answer=new_id.toLowerCase();
//2. 소문자, 숫자, 빼기, 밑줄, 마침표 제외 모든 문자 제거
answer=answer.replaceAll("[^a-z0-9-_.]","");
//3. 마침표 2번이상 연속되면 하나로
answer=answer.replaceAll("[.]{2,}",".");
//4. 마침표가 처음이나 끝에 위치하면 제거
answer=answer.replaceAll("^[.]|[.]$","");
//5. 빈 문자열이라면 "a" 대입
if(answer.length()==0)
answer+="a";
//6. 길이가 16자 이상이면 ,15개 이후의 문자들 제거
if(answer.length()>15){
int n=0;
StringBuilder sb=new StringBuilder();
for(char ch:answer.toCharArray()) {
if (n == 15)
break;
sb.append(ch);
n++;
}
answer=sb.toString();
}
//만약 마침표가 끝에 위치한다면 끝에 위치한 마침표 제거
answer=answer.replaceAll("[.]$","");
//만약 길이가 2자 이하라면, 마지막 문자를 길이가 3이 될 때까지 반복해서 이어붙힘
if(answer.length()<3){
char[] chr=new char[answer.length()];
StringBuilder sb=new StringBuilder();
int i=0;
for(char ch:answer.toCharArray()){
chr[i++]=ch;
sb.append(ch);
}
while(sb.length()!=3){
sb.append(chr[i-1]); //chr[i-1]에는 마지막 문자가 들어가게 됨.
}
answer=sb.toString();
}
return answer;
}
}
1. 정규식 표현
"[^a-z0-9-_.]"
-> 소문자,숫자,빼기,밑줄,마침표 제외
이때 "[^a-z 0-9 -_.]"처럼 보기 좋게 공백을 넣었더니 적용이 안됨.
-> 공백을 넣지 말아야 함.
2. "[.] {2,}"
: 마침표가 2번이상 연속인 경우
3. "^[.] | [.]$"
: 마침표가 처음이거나
마침표가 마지막인 경우
더 좋은 풀이
public class Solution{
public String solution(String new_id) {
//1. 소문자로 치환
String answer;
answer = new_id.toLowerCase();
//2. 소문자, 숫자, 빼기, 밑줄, 마침표 제외 모든 문자 제거
answer=answer.replaceAll("[^a-z0-9-_.]","");
//3. 마침표 2번이상 연속되면 하나로
answer=answer.replaceAll("[.]{2,}",".");
//4. 마침표가 처음이나 끝에 위치하면 제거
answer=answer.replaceAll("^[.]|[.]$","");
//5. 빈 문자열이라면 "a" 대입
if(answer.isEmpty())
answer="a";
//6. 만약 길이가 16자 이상이면,15개 이후의 문자들 제거
if(answer.length()>15){
answer=answer.substring(0,15);
//마침표가 끝에 위치한다면 끝에 위치한 마침표 제거
answer=answer.replaceAll("[.]$","");
}
//길이가 2자 이하라면, 마지막 문자를 길이가 3이 될 때까지 반복해서 이어붙힘
while(answer.length()<3) {
answer+=answer.charAt(answer.length()-1);
}
return answer;
}
}
1. 0~15 인덱스까지의 16자를 잘라냄
answer.substring(0,15);
2. 2자 이하라면, answer.length()-1 인덱스의 문자를 charAt() 메서드를 사용하여
길이가 3이 될때까지 반복해서 이어 붙임
while(answer.length()<3) {
answer+=answer.charAt(answer.length()-1);
}
3. 빈 문자열인지 확인하는 메서드
answer.empty()
728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 문자열 찾기와 바꾸기 (3) | 2024.01.05 |
|---|---|
| 정규표현식 (4) | 2024.01.05 |
| 프로그래머스 - 문자열 다루기 기본 (Level 1) (0) | 2024.01.04 |
| 프로그래머스 - 숫자 문자열과 영단어(Level 1) (2) | 2024.01.02 |
| 프로그래머스 - 문자열 내 p와 y의 개수 (Level 1) (2) | 2024.01.02 |