-
[Programmers / level1] 신규 아이디 추천Programmers/코딩테스트 풀이 2022. 1. 12. 23:04
프로그래머스 / level1 / Java / 신규 아이디 추천
문제
아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다.
아이디의 길이는 3자 이상 15자 이하여야 합니다.
단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.
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이 될 때까지 반복해서 끝에 붙입니다.
public class RecommendIdSolution { public String solution(String new_id) { String answer = ""; //1단계 - 전체 소문자 변환 answer = new_id.toLowerCase(); // 2단계 - 숫자, 소문자, - _ . 가 아닌 문자를 제거 answer = answer.replaceAll("[^0-9a-z-_.]",""); //3단계 - .가 2개 이상 반복 될 경우 치환 answer = answer.replaceAll("[.]{2,}","."); //4단계 - .로 시작하거나, .로 끝나는 경우 제거 answer = answer.replaceAll("^[.]|[.]$",""); //5단계 - answer의 길이가 0인 경우, new_id의 길이만큼 a로 치환하여 answer에 저장 if(answer.length() < 1) answer = new_id.replace(new_id, "a"); //6단계 - answer의 길이가 15 이상인 경우 15번째 자리까지 잘라내고, 시작점이나 끝 자리가 . 인 경우 제거 if(answer.length() > 15) answer = answer.substring(0,15).replaceAll("^[.]|[.]$",""); //7단계 - answer의 길이가 2 이하인 경우 마지막 글자 lastOne을 answer에 결합 if(answer.length() < 3) { String lastOne = answer.substring(answer.length()-1,answer.length()); for(int i = answer.length() ; i < 3 ; i++){ answer = answer.concat(lastOne); } } return answer; } }
'Programmers > 코딩테스트 풀이' 카테고리의 다른 글
[Programmers/Level1] 없는 숫자 더하기 (0) 2022.01.27 [Programmers/Level1] 숫자 문자열과 영단어 (0) 2022.01.20 [Programmers / level1] 로또의 최고 순위와 최저 순위 (1) 2021.12.19 [Programmers / level1] 완주하지 못한 선수 (1) 2021.12.07 [Programmers / level1] 핸드폰 번호 가리기 (0) 2021.12.03