프로그래머스 Lv.1 2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천
신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return하는 solution함수를 작성하는 문제이다.
String에 쓸 수 있는 함수를 적재적소에 사용하는 것이 중요한 문제라고 생각하였다.
🪄 toLowerCase() : 대문자를 소문자로
String str = new_id.toLowerCase();
🪄 replaceAll(String regex, String replacement)
[^s] : 특정 문자(s)를 제외한 문자 치환
String str = new_id.replace("[^a]", "b"); // a를 제외한 문자를 b로 치환
s{2,} : 연속되는 특정 문자(s) 치환
String str = new_id.replace("a{2,}", "b"); // a가 2이상 연속되는 부분을 b로 치환
^s: 처음에 위치하는 특정 문자(s) 치환
String str = new_id.replace("^a", "b"); // a가 처음에 위치한다면 b로 치환
s$: 끝에 위치하는 특정 문자(s) 치환
String str = new_id.replace("a$", "b"); // a가 끝에 위치한다면 b로 치환
🪄 substring(int begin, int end) : begin ~ end-1 범위의 문자열
String str = "slamdunk";
String s = str.substring(0, 5); // s를 print하면 "slam"
class Solution {
public String solution(String new_id) {
String answer = "";
// 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환
new_id = new_id.toLowerCase();
// 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
new_id = new_id.replaceAll("[^0-9a-z-_.]", "");
// 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
new_id = new_id.replaceAll("\\.{2,}", ".");
// 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거
new_id = new_id.replaceAll("^\\.", "");
new_id = new_id.replaceAll("\\.$", "");
// 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입
if ("".equals(new_id))
new_id = "a";
// 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거
// 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.)를 제거
if (new_id.length() > 15) {
new_id = new_id.substring(0, 15);
new_id = new_id.replaceAll("\\.$", "");
}
// 7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙이
if (new_id.length() < 3) {
String last = String.valueOf(new_id.charAt(new_id.length()-1));
while (new_id.length() < 3) {
new_id = new_id + last;
}
}
answer = new_id;
return answer;
}
}