일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sorting
- implement
- hash table
- Binary Search
- string
- 구현
- bit manipulation
- Tree
- array
- Stack
- Method
- 코테
- geometry
- 자바
- two pointers
- database
- Binary Tree
- Math
- greedy
- Data Structure
- SQL
- 코딩테스트
- simulation
- Matrix
- 파이썬
- dynamic programming
- Class
- Number Theory
- java
- Counting
- Today
- Total
코린이의 소소한 공부노트
[프로그래머스/Lv.1] 신규 아이디 추천 본문
1. Input
1) 신규 유저가 입력한 아이디가 new_id
2. Output
1) 아이디 규칙 7단계를 거친 후의 추천 id를 담은 String 변수
3. Constraint
1) new_id는 길이 1 이상 1,000 이하인 문자열
2) new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있다.
3) new_id에 나타날 수 있는 특수문자는 -_.~!@#$%^&*()=+[{]}:?,<>/ 로 한정된다.
4) 아이디 규칙 7단계
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이 될 때까지 반복해서 끝에 붙인다.
4. Example
Input: new_id="z-+.^." -> Output: "z--“
설명:
1단계: 변화 없음
2단계: "z-+.^." → +^ 제거 → "z-.."
3단계: "z-.." → 연속 마침표 1개로 치환 → "z-."
4단계: "z-." → 맨 끝 마침표 제거 → "z-"
5단계: 변화 없음
6단계: 변화 없음
7단계: "z-" → 길이가 2이므로 마지막 문자 1번 추가 → "z--"
5. Code
1) 첫 코드(2022/??)
String answer = new_id;
// 1. 모두 소문자로
answer = answer.toLowerCase();
// 2. 알파벳, 숫자, -, _, . 빼고 다 삭제
answer = answer.replaceAll("[^a-z0-9-_.]", "");
// 3. .가 2번 이상 -> 1개로 치환
answer = answer.replaceAll("\\.+", ".");
// 4. .가 처음 or 끝 -> 제거
if(answer.charAt(0) == '.') answer = answer.substring(1);
if(answer.length()!=0 && (answer.charAt(answer.length()-1)) == '.')
answer = answer.substring(0, answer.length()-1);
// 5. 빈 문자열 -> new_id에 "a" 대입
if(answer.length() == 0) answer = "a";
// 6. 16자 이상 -> 15개의 문자만 남김. .가 끝 -> 제거
if(answer.length() > 15) {
answer = answer.substring(0, 15);
if(answer.charAt(14) == '.')
answer = answer.substring(0, 14);
}
// 7. 2자 이하 -> 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 붙임
while(answer.length() <3)
answer += answer.charAt(answer.length()-1);
return answer;
'코딩테스트 풀이 > JAVA' 카테고리의 다른 글
[프로그래머스/Lv.1] 3진법 뒤집기 (0) | 2022.11.17 |
---|---|
[프로그래머스/Lv.1] 내적 (0) | 2022.11.17 |
[프로그래머스/Lv.1] 음양 더하기 (0) | 2022.11.15 |
[프로그래머스/Lv.1] 로또의 최고 순위와 최저 순위 (0) | 2022.11.15 |
[프로그래머스/Lv.1] 악수의 개수와 덧셈 (0) | 2022.11.14 |