Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 연습문제
- Linux
- 문자열
- 개발자 회고록
- 코딩테스트
- Kotlin
- java 백준 1차원 배열
- 자바스크립트 코딩의 기술
- 월간코드챌린지
- GoingBus
- JavaScript
- 프로그래머스
- 카카오
- 코테
- 반복문
- 리눅스마스터 1급 정리
- 자바
- 리눅스마스터 3과목
- 스프링 컨테이너
- map
- 리눅스
- 고잉버스
- 백준 javascript
- 스프링 빈
- 명령어
- Memoir
- toCharArray
- 리눅스마스터1급
- Java
- 백준 java
Archives
- Today
- Total
hoon's bLog
[Java] 프로그래머스 신규아이디 추천 자바 본문
반응형
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/72410
느낌이 온다...
이건 정규식과 replace() 메서드 사용 각이닷!
[나의 풀이]
class Solution {
public String solution(String new_id) {
String answer = "";
new_id = new_id.toLowerCase();
for (int i=0; i<new_id.length(); i++) {
//알파벳, 숫자, ".", "_", "-" 만 허용
if(String.valueOf(new_id.charAt(i)).matches("[a-z0-9._-]")){
answer += new_id.charAt(i);
}
}
//.. -> .
answer = answer.replaceAll("[.]{2,}", ".");
//처음이나 끝에 위치하면 제거
answer = answer.replaceAll("^[.]|[.]$","");
if (answer.length() == 0){
answer += "a";
}
//15자리까지 자르고, 끝에 . 제거
if(answer.length() >= 16) {
answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$", "");
}
//2자 이하면 길이 3 될때 까지 반복
if(answer.length() <= 2) {
while(answer.length() < 3){
answer += answer.charAt(answer.length()-1);
}
}
return answer;
}
}
[다른 사람의 풀이]
class Solution {
public String solution(String new_id) {
String s = new KAKAOID(new_id)
.replaceToLowerCase()
.filter()
.toSingleDot()
.noStartEndDot()
.noBlank()
.noGreaterThan16()
.noLessThan2()
.getResult();
return s;
}
private static class KAKAOID {
private String s;
KAKAOID(String s) {
this.s = s;
}
private KAKAOID replaceToLowerCase() {
s = s.toLowerCase();
return this;
}
private KAKAOID filter() {
s = s.replaceAll("[^a-z0-9._-]", "");
return this;
}
private KAKAOID toSingleDot() {
s = s.replaceAll("[.]{2,}", ".");
return this;
}
private KAKAOID noStartEndDot() {
s = s.replaceAll("^[.]|[.]$", "");
return this;
}
private KAKAOID noBlank() {
s = s.isEmpty() ? "a" : s;
return this;
}
private KAKAOID noGreaterThan16() {
if (s.length() >= 16) {
s = s.substring(0, 15);
}
s = s.replaceAll("[.]$", "");
return this;
}
private KAKAOID noLessThan2() {
StringBuilder sBuilder = new StringBuilder(s);
while (sBuilder.length() <= 2) {
sBuilder.append(sBuilder.charAt(sBuilder.length() - 1));
}
s = sBuilder.toString();
return this;
}
private String getResult() {
return s;
}
}
}
[정리]
- 정규식의 기본적인 문법만 알고 있다면 정말 많은 응용이 가능하다! 참 유용한 듯 ㅎㅎ
- 코드의 재사용성, 유지보수 관리 측면까지 고려한 내부클래스의 메서드 사용... 실무에서 많이 쓰이는 패턴 중 하나이기도 하다!
개인 피셜 난이도 : ★☆☆☆☆
단순히 테스트의 답만을 찾기 보단,
이렇게 다른 분들의 코드를 보며 리뷰하고, 내 소스와 비교해보면서
알아가는 재미가 쏠쏠하다.
늦게라도 시작한 코딩 테스트이지만,
계속해서 멈추지 않고,
꾸준히 내 갈길 가자!
끝.
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 신고 결과 받기 자바 (0) | 2022.08.02 |
---|---|
[Java] 프로그래머스 로또의 최고 순위와 최저순위 자바 (0) | 2022.07.08 |
Java 프로그래머스 실패율 자바 (0) | 2022.07.01 |
Java 프로그래머스 다트게임 자바 (0) | 2022.06.23 |
[Java] 프로그래머스 비밀지도 자바 (0) | 2022.06.22 |