# 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/72410
목차
나의 풀이 포인트
- 정규표현식 사용
나의 문제풀이
class Solution {
public String solution(String new_id) {
String answer = new_id;
// 1단계) new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
answer = answer.toLowerCase();
// 2단계) new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
answer = answer.replaceAll("[^a-z0-9._-]","");
// 3단계) new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
answer = answer.replaceAll("[.]{2,}",".");
// 4단계) new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
answer = answer.replaceAll("^[.]|[.]$", "");
// 5단계) new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
if(answer.length() == 0){
answer = "a";
}
// 6단계) new_id의 길이가 16자 이상이면,
// new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
// 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
if (answer.length() >= 16) {
answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$", "");
}
// 7단계) new_id의 길이가 2자 이하라면,
// new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
if(answer.length() <= 2){
char last = answer.charAt(answer.length()-1); // 마지막 문자
while (answer.length() < 3) {
answer += last;
}
}
return answer;
}
}
프로그래머스 다른사람 풀이 참고(- , 최현준 , - , - / 링크)
class Solution {
public String solution(String new_id) {
String s = new KAKAOID(new_id)
.replaceToLowerCase()
.filter()
.toSingleDot()
.noStartEndDot()
.noBlank()
.noGreaterThan16()
.noLessThan2()
.getResult();
return s;
}
private static class KAKAOID {
private String s;
KAKAOID(String s) {
this.s = s;
}
private KAKAOID replaceToLowerCase() {
s = s.toLowerCase();
return this;
}
private KAKAOID filter() {
s = s.replaceAll("[^a-z0-9._-]", "");
return this;
}
private KAKAOID toSingleDot() {
s = s.replaceAll("[.]{2,}", ".");
return this;
}
private KAKAOID noStartEndDot() {
s = s.replaceAll("^[.]|[.]$", "");
return this;
}
private KAKAOID noBlank() {
s = s.isEmpty() ? "a" : s;
return this;
}
private KAKAOID noGreaterThan16() {
if (s.length() >= 16) {
s = s.substring(0, 15);
}
s = s.replaceAll("[.]$", "");
return this;
}
private KAKAOID noLessThan2() {
StringBuilder sBuilder = new StringBuilder(s);
while (sBuilder.length() <= 2) {
sBuilder.append(sBuilder.charAt(sBuilder.length() - 1));
}
s = sBuilder.toString();
return this;
}
private String getResult() {
return s;
}
}
}
객체지향적으로 작성하신 게 매우 신기했다~~~!!! 충격적...
noGreaterThan16(), noLesThan2() 함수들은 16이랑 2를 파라미터로 받아서 처리하면 더 재사용성이 좋지 않을까 조심스레 생각해봅니다~~😉
'알고리즘 문제풀이 > 프로그래머스 Level 1' 카테고리의 다른 글
[2018 KAKAO BLIND RECRUITMENT[1차]/Java] 비밀지도 (0) | 2023.07.23 |
---|---|
[2020 카카오 인턴십/Java] 키패드 누르기 (0) | 2023.07.21 |
[2019 KAKAO BLIND RECRUITMENT/Java] 실패율 (0) | 2023.07.20 |
[2021 카카오 채용연계형 인턴십/Java] 숫자 문자열과 영단어 (0) | 2023.07.20 |
[2022 KAKAO BLIND RECRUITMENT/Java] 신고 결과 받기 (0) | 2023.07.17 |