후기
- 단순 구현문제라고 생각했는데, 생각보다 쉽지않았다
- 먼저, 코딩해야할 분량이 많았는데, 정규표현식이나 stream을 좀 더 잘 활용할수 있었더라면 더 쉽게 풀렸을꺼같다. 나중에 정규표현식과 stream을 공부해서 다시 도전할 계획이다.
- 논리적으로 7단계로 나눠져 있는데, 단계별로 쪼개서 공략하는거야 대부분의 로지컬 띵킹이 탑재된 사람이라면 생각해낼꺼같다.
- 로컬에서 테스크코드를 작성해서 디버깅을 돌려가며 테스트 해보지 않았더라면 풀기 정말 힘들었을 문제였다.
class Solution {
public String solution(String new_id) {
String answer = s1(new_id);
answer = s2(answer);
answer = s3(answer);
answer = s4(answer);
answer = s5(answer);
answer = s6(answer);
answer = s7(answer);
return answer;
}
private String s7(String answer) {
StringBuilder builder = new StringBuilder(answer);
if (answer.length() <= 2) {
int idx = answer.length();
while (builder.length() < 3) {
builder.append(answer.charAt(idx - 1));
}
}
return builder.toString();
}
private String s6(String answer) {
if (answer.length() >= 16) {
answer = answer.substring(0, 15);
}
answer = s4(answer);
return answer;
}
private String s5(String answer) {
if (answer.equals("")) {
return "a";
}
return answer;
}
private String s4(String answer) {
if (answer.equals(".")) {
return "";
}
char[] arr = answer.toCharArray();
if (arr[arr.length - 1] == '.') {
answer = answer.substring(0, answer.length() - 1);
}
if (arr[0] == '.') {
answer = answer.substring(1, answer.length());
}
return answer;
}
private String s3(String answer) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < answer.length(); i++) {
if (answer.charAt(i) == '.' && (i != (answer.length() - 1))) {
for (int j = i; j < answer.length(); j++) {
if (answer.charAt(j) != '.') {
builder.append('.');
builder.append(answer.charAt(j));
i = j;
break;
}
}
} else {
builder.append(answer.charAt(i));
}
}
return builder.toString();
}
private String s2(String answer) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < answer.length(); i++) {
char curChar = answer.charAt(i);
if ('a' <= curChar && curChar <= 'z') {
builder.append(curChar);
} else if ((curChar == '-') || (curChar == '_') || (curChar == '.')) {
builder.append(curChar);
} else if ('0' <= curChar && curChar <= '9') {
builder.append(curChar);
}
}
return builder.toString();
}
private String s1(String answer) {
return answer.toLowerCase();
}
public static void main(String[] args) {
Solution s = new Solution();
tester("...!@BaT#*..y.abcdefghijklm", "bat.y.abcdefghi");
tester("z-+.^.", "z--");
tester("=.=", "aaa");
tester("123_.def", "123_.def");
tester("abcdefghijklmn.p", "abcdefghijklmn");
tester("b......@", "bbb");
tester("........................", "aaa");
}
private static void tester(String new_id, String result) {
Solution s = new Solution();
String yours = s.solution(new_id);
if (result.equals(yours)) {
System.out.println("OK");
} else {
System.out.println("NG : " + yours);
}
}
}