[ 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천 ]
https://programmers.co.kr/learn/courses/30/lessons/72410
- 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
- 2단계 newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 * 문자를 제거합니다.
- 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
- 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
- 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
- 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.- 7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
문제에 주어진 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;
}
}