이번 문제는 replaceAll() 메소드와 정규표현식을 사용하는 문제였다.
그리 어렵다고 느껴지는 문제는 아니었다.
전체 코드를 보자.
class Solution {
public String solution(String new_id) {
new_id = new_id.toLowerCase();
new_id = new_id.replaceAll("[^\\w-_.]", "");
new_id = new_id.replaceAll("\\.+", ".");
if(new_id.charAt(0) == '.') new_id = new_id.substring(1);
if(new_id.length() != 0) {
if(new_id.charAt(new_id.length() - 1) == '.') new_id = new_id.substring(0, new_id.length() - 1);
}
if(new_id.length() == 0) new_id = "a";
if(new_id.length() >= 16) new_id = new_id.substring(0, 15);
while(new_id.length() <= 2) {
new_id = new_id + new_id.charAt(new_id.length() - 1);
}
if(new_id.length() != 0) {
if(new_id.charAt(new_id.length() - 1) == '.') new_id = new_id.substring(0, new_id.length() - 1);
}
return new_id;
}
}
사실 나는 뭐 객체지향스럽게 풀었다거나 그런 것도 아니었다.
그렇다고 정규표현식을 잘 활용한 것도 아니었는데 그냥 어거지로 끼워 맞춘 느낌..?
그런데 다른 사람이 풀이한 것을 보고 깜짝 놀랬다.
완전 객체지향스럽게 푼 풀이여서 이렇게 생각을 하고 풀 수도 있구나 하고 감탄했다.
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;
}
}
}
- , 최현준 , 양보은 , 최지원 외 1 명 의 풀이
이런 코드들을 많이 본 후 문제에 접근할 때 어떻게 하면 조금 더 객체지향적으로 문제를 해결할 수 있는지
고민을 하는 시간을 가져봐야겠다..