내가 문제를 푼 방식은 알고리즘의 개념을 그냥 그대로 이용했다
하나씩 차근차근 풀어나간다.
시험을 보느라 Java 코딩 실력이 많이 늘지 않아서 아직 봐도 지금 이 방법이 최선이겠지만 우선 적는다.
- Scanner 클래스를 이용해서 아이디를 입력 받는다
- 주어진 규칙에 따라 1단계 ~ 7단계를 처리해준다.
import java.util.ArrayList;
import java.util.List;
class Solution {
public String solution(String new_id) {
String answer = "";
char word[] = new char[new_id.length()];
// 1단계 : 소문자로 변경
new_id = new_id.toLowerCase();
word = new_id.toCharArray();
ArrayList<String> list = new ArrayList<String>();
for (char i : word) {
list.add(i + "");
}
// 2단계 : 소문자, 숫자(0~9), '-', '_', '.' 이면
for (int i = 0; i < list.size(); i++) {
char temp = (char) (list.get(i).charAt(0));
if ((temp >= 'a' && temp <= 'z') || (temp >='0' && temp <='9') || (temp == '-' || temp == '_' || temp == '.')) {
continue;
}
else {
list.remove(i);
i--;
}
}
// 3단계 : 마침표(.)가 두개 이상이면 .하나로 변경.
for (int i=0; i<list.size()-1; i++) {
char temp = (char) (list.get(i).charAt(0));
if (temp == '.' && list.get(i + 1).charAt(0) == '.') {
list.remove(i);
i--;
}
}
// 4단계 : 마침표(.)가 맨 앞이나 뒤에 있을 때 삭제.
if (list.get(0).charAt(0) == '.') {
list.remove(0);
}
else if (list.get(list.size() - 1).charAt(0) == '.') {
list.remove(list.size() - 1);
}
// 5단계 : 삭제하고 글자가 빈문자열이면 a 추가
if (list.size()== 0) {
list.add("a");
}
// 6단계 : 글자 길이가 15글자를 초과하면
if (list.size() > 15) {
for (int i = 15; i < list.size(); i++) {
list.remove(i);
i--;
}
}
//제거 후 마지막 글자가 '.' 이라면 삭제.
if (list.get(list.size() - 1).charAt(0) == '.') { //
list.remove(list.size()-1);
}
// 7단계 : 글자수가 2자 이하면 마지막 문자를 붙여서 3자를 만들어줌
if (list.size() < 3) {
char temp = list.get(list.size() - 1).charAt(0);
while(list.size()<3) {
list.add(temp + "");
}
}
for(String str:list){
answer += str;
}
return answer;
}
}
Java에서 ArrayList에 대한 개념이 많이 부족했었는데
이번에 카카오 신규 아이디 추천을 공부하면서 제네릭도 공부하게 되었고, ArrayList를 다루는 방법을 습득했던거 같다.