🔥 2021 KAKAO BLIND RECRUITMENT
1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
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이 될 때까지 반복해서 끝에 붙입니다.
예제:
new_id | result |
"...!@BaT#*..y.abcdefghijklm" | "bat.y.abcdefghi" |
"z-+.^." | "z--" |
"=.=" | "aaa" |
"123_.def" | "123_.def" |
제한 조건:
- new_id는 길이 1 이상 1,000 이하인 문자열입니다.
- new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있습니다.
- new_id에 나타날 수 있는 특수문자는 -_.~!@#$%^&*()=+[{]}:?,<>/ 로 한정됩니다.
Solution #1
class Solution {
public String solution(String new_id) {
String answer = new_id;
answer = answer
// 1. 소문자로 치환
.toLowerCase()
// 2. 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 제외하고 모든 문자 제거
.replaceAll("[^\\.\\-_0-9a-z]", "")
// 3. 마침표(.)가 2번 이상 연속된 부분 하나로 치환
.replaceAll("[.]+", ".");
// 4. 마침표(.)가 처음이나 끝에 위치한다면 제거
if (answer.startsWith(".")) answer = answer.substring(1);
if (answer.endsWith(".")) answer = answer.substring(0, answer.length() - 1);
// 5. 빈 문자열이라면 "a" 대입
if (answer.isEmpty()) answer = "a";
// 6. 16자 이상이면 첫 15개의 문자를 제외한 나머지 제거, 제거 후 마침표(.)가 마지막 위치한다면 마침표 제거
if (answer.length() >= 16)
answer =
answer.substring(0, 15).endsWith(".") ?
answer.substring(0, 14) :
answer.substring(0, 15);
// 7. 길이가 2자 이하라면 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 추가
if (answer.length() <= 2) {
char last = answer.charAt(answer.length() - 1);
while (answer.length() < 3) {
answer += last;
}
}
return answer;
}
}
Result #1
More Algorithm!
👇👇
github.com/ggujangi/ggu.programmers
출처 : 프로그래머스
'프로그래머스 - JAVA > Level 1' 카테고리의 다른 글
[JAVA] 프로그래머스 Lv.1 : 로또의 최고 순위와 최저 순위 (0) | 2021.06.02 |
---|---|
[JAVA] 프로그래머스 Lv.1 : 같은 숫자는 싫어 (0) | 2021.06.02 |
[JAVA] 프로그래머스 Lv.1 : 폰켓몬 (0) | 2021.05.16 |
[JAVA] 프로그래머스 Lv.1 : 약수의 개수와 덧셈 (0) | 2021.05.16 |
[JAVA] 프로그래머스 Lv.1 : 음양 더하기 (0) | 2021.05.14 |