-
[프로그래머스 Level1][Java] 신규 아이디 추천Coding Test/Programmers 2021. 12. 8. 19:26
신규 아이디 추천
- 아이디를 입력받아 7단계에 걸친 아이디 규칙에 맞는지 검사하여 새로운 아이디를 리턴하는 문제
※ 생각하기
- 정규표현식
※ 풀이법
1) 1단계 : toLowerCase()로 아이디를 소문자로 만들기
2) 2단계 : [^a-z0-9-_.] 정규표현식을 활용해 replaceAll()
- ^가 [ ]안에 들어가게 되면 '^의 뒤 조건들을 빼고'라는 뜻이 된다.
3) 3단계 : [.]{2,} 정규표현식을 활용해 replaceAll()
- []안에 있는 마침표가([.]) 2번({2}) 이상(,)이면
4) 4단계 : ^[.]|[.]$ 정규표현식을 활용해 replaceAll()
- 마침표로 시작하거나(^[.]) 또는 (|) 마침표로 끝나면([.]$)
5) 5단계 : 빈 문자열이라는 것은 길이(length)가 0이라는 의미와 같으므로 조건과 결과를 삼항 연산자로 구현
6) 6단계 : 길이가 16 이상이면 substring을 이용하여 처음부터 15까지 잘라준다.
[.]$ 정규표현식을 활용해 replaceAll() → 4단계 방법을 활용
7) 7단계 : 길이가 2 이하이면 substring()으로 길이 -1 부터 길이만큼 잘라 new_id에 계속 더해주기
정규표현식만 잘 알면 매우 쉬운 문제였다.
정규표현식 공부를 했었지만 활용해야 할 때마다 구글링하는건 어쩔 수 없는 것 같다. ㅎㅎ;




public class Solution { // 결과 확인을 위함 public static void main(String[] args) { Solution st = new Solution(); String new_id = "...!@BaT#*..y.abcdefghijklm"; System.out.println(st.solution(new_id)); new_id = "z-+.^."; System.out.println(st.solution(new_id)); new_id = "=.="; System.out.println(st.solution(new_id)); new_id = "123_.def"; System.out.println(st.solution(new_id)); new_id = "abcdefghijklmn.p"; System.out.println(st.solution(new_id)); } public String solution(String new_id) { // 1단계 : 모든 대문자를 대응되는 소문자로 치환 new_id = new_id.toLowerCase(); // 2단계 : 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거 new_id = new_id.replaceAll("[^a-z0-9-_.]", ""); // 3단계 : 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환 new_id = new_id.replaceAll("[.]{2,}", "."); // 4단계 : 마침표(.)가 처음이나 끝에 위치한다면 제거 new_id = new_id.replaceAll("^[.]|[.]$", ""); // 5단계 : 빈 문자열이라면, new_id에 "a"를 대입 new_id = new_id.length() == 0 ? "a" : new_id; // 6단계 // 1) 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거 // 2) 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거 new_id = new_id.length() >= 16 ? new_id.substring(0, 15).replaceAll("[.]$", "") : new_id; // 7단계 : 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙이기 if(new_id.length() <= 2) { while(new_id.length() < 3) { new_id += new_id.substring(new_id.length()-1, new_id.length()); } } return new_id; } }'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스 Level1][Java] 크레인 인형뽑기 게임 (0) 2021.12.08 [프로그래머스 Level1][Java] 실패율 (0) 2021.12.08 [프로그래머스 Level1][Java] 비밀지도 (0) 2021.12.08 [프로그래머스 Level1][Java] 키패드 누르기 (0) 2021.12.08 [프로그래머스 Level1][Java] 숫자 문자열과 영단어 (0) 2021.12.08