https://programmers.co.kr/learn/courses/30/lessons/72410
후... 이 문제 여러가지 검색하다가 너무 오래걸려서 다른 사람꺼 보기로 했다.
테스트케이스 1개만 통과되는 개욱긴 코드
다른 사람의 코드를 구경해보니 그냥 문제에 써있는 단계대로 푸는게 좋아보인다.
나는 단계 내맘대로 만들어서 어쩌구 했는데 ㅎㅎ 그래서 망했나?
https://minhamina.tistory.com/121
class Solution {
public String solution(String new_id) {
// 1. 소문자로 변경
new_id = new_id.toLowerCase();
// 2. 소문자 숫자 -_. 제외한 모든 문자 제거
String id = "";
for(int i = 0; i < new_id.length(); i++) {
char ch = new_id.charAt(i);
if(ch >= 'a' && ch <= 'z') {
id += String.valueOf(ch);
} else if(ch >= '0' && ch <= '9') {
id += String.valueOf(ch);
} else if(ch == '.' || ch == '-' || ch == '_') {
id += String.valueOf(ch);
}
}
// 3. . 하나만
for(int i = 0; i < id.length(); i++) {
if(id.charAt(i) == '.') {
int j = i+1;
String dot = ".";
while(j != id.length() && id.charAt(j) == '.') {
dot += ".";
j++;
}
if(dot.length() > 1)
id = id.replace(dot, ".");
}
}
// 4. 첫번째, 마지막 . 제거
if(id.startsWith(".") ) {
id = id.substring(1, id.length());
} else if(id.endsWith(".")) {
id = id.substring(0, id.length()-1);
}
// 5. 빈 문자열이라면 a 대입
if(id.length() == 0) {
id += "a";
}
// 6. 16자 이상이면, 15자만 남김
if(id.length() >= 16) {
id = id.substring(0, 15);
}
// 마지막 . 제거
if(id.endsWith(".")) {
id = id.substring(0, id.length()-1);
}
// 7. 2자 이하라면, 마지막 문자 길이 3까지 반복해서 붙임
String last = id.charAt(id.length()-1) + "";
if(id.length() == 2) {
id = id + last;
} else if(id.length() == 1) {
id = id + last + last;
}
return id;
}
}
구현에 충실한 코드....
내가 구현하지 못한 3번..을 저렇게 구현하는구나 ㅎㅎ
j가 id의 제일 끝 인덱스가 아니고 j번째 문자가 "."일 때 +dot 해주고
dot가 1보다 크면 여러 "."들을 replace로 "."으로 만들어줌
글고 4번.. startsWith 이라는거 처음본다 ㄷㄷ substring을 사용해 substring(i) 면 i번째 인덱스부터 끝까지 자르기,
substring(begin i, start i) 해서 그 위치만큼 자르기!
그리고 정규식을 이용하면 더 간단하게 코드 구현이 가능하다!
class Solution {
public String solution(String new_id) {
String id = new_id.toLowerCase(); // 소문자로
id = id.replaceAll("[^-_.a-z0-9]", ""); //-_. 영문자 숫자만 남김
id = id.replaceAll("[.]{2,}", "."); // .2개 이상 .으로
id = id.replaceAll("^[.]|[.]$", ""); // 처음과 끝 . 제거
if(id.equals("")) // 빈 문자열이라면 a 추가
id += "a";
if(id.length() >= 16){ // 16자 이상이면 15자로
id = id.substring(0, 15);
id = id.replaceAll("^[.]|[.]$", ""); // 끝 . 제거
}
if(id.length() <= 2) // 2자 이하라면 3자까지 마지막 문자추가
while(id.length() < 3)
id += id.charAt(id.length() - 1);
return id;
}
}
ㄷㄷㄷ
내일 모레는 정규식에 대해 정리해야겠다.....
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 for JAVA (0) | 2021.11.24 |
---|---|
[프로그래머스] 키패드 누르기 for JAVA (0) | 2021.11.22 |
[프로그래머스] 숫자 문자열과 영단어 for JAVA (0) | 2021.11.22 |
[프로그래머스] 로또의 최고 순위와 최저 순위 for JAVA (0) | 2021.11.04 |
[프로그래머스] 체육복 for JAVA (0) | 2021.10.21 |