
99클럽 코테 스터디 16일차 TIL - 프로그래머스 : 신규아이디 추천프로그래머스2025. 4. 21. 22:00
Table of Contents
✅ 문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✅ 공부한 내용
answer = answer.replaceAll("[^a-z0-9._-]", "");
-> 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
answer = answer.replaceAll("\\.+", ".");
-> 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
정규표현식 "\\.+"" 는 . 이 한 번 이상 반복되는 경우
- \\. : 마침표 .자체를 의미 (.는 정규표현식에서 아무 문자라는 뜻이기 때문에 백슬래시로 escape 해줘야한다)
- + : 한 개 이상 반복
4단계. 문자열 시작에 있는 마침표 제거
answer.replaceAll("^\\.", "");
4단계. 문자열 끝에 마침표 제거
answer.replaceAll("\\.$", "");
[자주 쓰는 정규식 기호]
. | 임의의 한 문자 | a.c => abc 또는 a9c 등.. |
\d | 숫자 [0-9] | \d\d => 23 또는 45 등.. |
\w | 알파벳, 숫자, _ | [a-zA-Z0-9_] |
\s | 공백 문자 | 스페이스, 탭 등 |
* | 0회 이상 반복 | a* => "" 또는 a 또는 aaa 등.. |
+ | 1회 이상 반복 | a+ => a 또는 aa 등.. |
? | 0회 또는 1회 | clou?r => color 또는 colour 등.. |
{n} | n번 반복 | \d{4} => 1234 또는 2023 등.. |
[abc] | a,b,c 중 하나 | [abc] => a 또는 b 또는 c 등.. |
[^abc] | a,b,c 제외한 문자 | [^abc] => d 또는 e등.. |
🔑 풀이
class Solution {
public String solution(String new_id) {
String answer = "";
// 1,2,3단계
answer = new_id.toLowerCase();
answer = answer.replaceAll("[^a-z0-9._-]", "");
answer = answer.replaceAll("\\.+", ".");
// 4단계
if (answer.startsWith(".")) {
answer = answer.substring(1);
}
if (answer.endsWith(".")) {
answer = answer.substring(0, answer.length() - 1);
}
// 5단계
if (answer.isEmpty()) {
answer = "a";
}
// 6단계
if (answer.length() >= 16) {
answer = answer.substring(0, 15);
if (answer.endsWith(".")) {
answer = answer.substring(0, answer.length() - 1);
}
}
// 7단계
if (answer.length() <= 2) {
while (true) {
if (answer.length() == 3) {
break;
}
answer += answer.charAt(answer.length() - 1);
}
}
return answer;
}
}
import java.util.*;
class Solution {
public String solution(String new_id) {
String answer = "";
answer = new_id.toLowerCase();
answer = answer.replaceAll("[^a-z0-9-_.]", "");
answer = answer.replaceAll("\\.+",".");
answer = answer.replaceAll("\\.$","");
answer = answer.replaceAll("^\\.", "");
if(answer.equals("")){
answer = "a";
}
if(answer.length() >= 16){
answer = answer.substring(0,15);
}
answer = answer.replaceAll("\\.$", "");
if(answer.length() <= 2){
char ch = answer.charAt(answer.length()-1);
int n = 3 - answer.length();
for(int i = 0; i < n; i++){
answer += ch;
}
}
return answer;
}
}
✅ 회고
정규표현식에 대해 잘 알고 있다면, 금방 풀리는 문제. 나는 잘 안 쓰다보니 검색해서 풀었다.
참고
정규표현식 : https://zhfvkq.tistory.com/5
[JAVA] 정규 표현식(replaceAll)
String.replaceAll('From','to') - 대상 문자열 모두를 원하는 문자 값으로 변환하는 함수 ^ 문자열의 시작 $ 문자열의 종료 . 임의의 한 문자(필수입력, 문자의 종류 가리지 않음) 단, \ 는 넣을 수 없음 *
zhfvkq.tistory.com
'프로그래머스' 카테고리의 다른 글
99클럽 코테 스터디 13일차 TIL - 프로그래머스 JadenCase 문자열 만들기 (0) | 2025.04.16 |
---|---|
99클럽 코테 스터디 3일차 TIL - 프로그래머스 : 바탕화면 정리 (0) | 2025.04.02 |
[프로그래머스] 롤케이크 자르기 - LV2 (1) | 2025.02.14 |
[프로그래머스] 오픈채팅방 - LV 2 (3) | 2025.02.12 |
[프로그래머스] 디펜스 게임 - LV 2 (0) | 2025.02.12 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!