반응형
👇 문제 URL 👇
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
class Solution {
public String solution(String new_id) {
String answer = "";
//1단계
new_id = new_id.toLowerCase();
System.out.println("1단계 :"+new_id);
//2단계
StringBuffer sb = new StringBuffer();
for(int i=0; i<new_id.length(); i++) {
if (String.valueOf(new_id.charAt(i)).matches("[0-9a-z._-]")) {
sb.append(new_id.charAt(i));
}
}
new_id = sb.toString();
System.out.println("2단계 :"+new_id);
//3단계
StringBuffer sb2 = new StringBuffer();
int cnt = 0;
for(int i=0; i<new_id.length(); i++) {
if (new_id.charAt(i) == '.') {
cnt++;
if (cnt < 2) {
sb2.append(new_id.charAt(i));
}
} else {
cnt = 0;
sb2.append(new_id.charAt(i));
}
}
new_id = sb2.toString();
System.out.println("3단계 :"+new_id);
if(new_id.charAt(0) == '.'){
new_id = new_id.substring(1);
}else if(new_id.charAt(new_id.length()-1) == '.'){
new_id = new_id.substring(0, new_id.length()-1);
}
System.out.println("4단계 :"+new_id);
if(new_id.length() == 0){
new_id = "a";
}
System.out.println("5단계 :"+new_id);
if(new_id.length() >= 16){
new_id = new_id.substring(0, 15);
if(new_id.charAt(new_id.length()-1) == '.'){
new_id = new_id.substring(0, new_id.length()-1);
}
}
System.out.println("6단계 :"+new_id);
if(new_id.length() ==2 ){
new_id = new_id + new_id.charAt(1);
}else if(new_id.length() ==1){
new_id = new_id + new_id.charAt(0) + new_id.charAt(0);
}
System.out.println("7단계 :"+new_id);
answer = new_id;
return answer;
}
}
결과..

2단계만 정규식으로 풀었는데.. 찾아보니 3,4,5 단계도 정규식으로 풀엇어야 했다..
2단계도 좀 더 간단하게 표현이 가능했다.
new_id = new_id.replaceAll("[^0-9a-z._-]", "");
[]안에서 ^는 그 문자가 아닌것들을 얘기한다.
3단계는 아래와 같이 수정하였다.
new_id = new_id.replaceAll("[.]{2,}", ".");
[a]{2}이면 aa이고 [a]{2,}이면 a가 2개 이상이고, [a]{2, 4}이면 aa, aaa, aaaa 이다.
4단계는 아래와 같이 수정하였다.
new_id = new_id.replaceAll("^[.]|[.]$", "");
^ : 시작표시, $ : 끝표시
.으로 시작하거나 .으로 끝나면 ""로 치환한다.
6단계에서도 마지막이 .으로 끝나는지 체크할 때 정규식을 사용하는 것으로 수정하였다.
new_id = new_id.replaceAll("[.]$","");
최종 소스
class Solution {
public String solution(String new_id) {
String answer = "";
//1단계
new_id = new_id.toLowerCase();
//2단계
new_id = new_id.replaceAll("[^0-9a-z._-]", "");
//3단계
new_id = new_id.replaceAll("[.]{2,}", ".");
//4단계
new_id = new_id.replaceAll("^[.]|[.]$", "");
//5단계
if(new_id.length() == 0){
new_id = "a";
}
//6단계
if(new_id.length() >= 16){
new_id = new_id.substring(0, 15);
new_id = new_id.replaceAll("[.]$","");
}
//7단계
if(new_id.length() ==2 ){
new_id = new_id + new_id.charAt(1);
}else if(new_id.length() ==1){
new_id = new_id + new_id.charAt(0) + new_id.charAt(0);
}
answer = new_id;
return answer;
}
}
다 통과했다..! 정규식과도 좀 가까워질 필요가...있다....

728x90
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스/JAVA] 키패드 누르기 (0) | 2022.07.25 |
---|---|
[프로그래머스/JAVA] 숫자 문자열과 영단어 (0) | 2022.07.24 |
[프로그래머스/JAVA] 로또의 최고 순위와 최저 순위 (0) | 2022.07.24 |
[프로그래머스/JAVA] 신고 결과 받기 (1) | 2022.07.24 |
[프로그래머스/JAVA] 가장 큰 수 - 정렬 (0) | 2022.02.20 |
댓글