반응형
https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=java
풀이
7개의 단계가 있어서 문제가 어려워 보이지만 매우 간단하다.
문제를 보자마자 정규표현식을 떠올렸고 생각나는대로 작성했다.
정규표현식을 몰라도 충분히 풀 수 있는 문제이기 때문에 전혀 어렵지 않지만 정규표현식의 사용 유무에 따라 코드 길이가 엄청 달라진다.
class Solution {
public String solution(String new_id) {
String answer = "";
// 1단계. 대문자 -> 소문자로 변경
new_id = new_id.toLowerCase();
// 2단계. 알파벳, 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자를 제외한 모든 문자 제거
new_id = new_id.replaceAll("[^-_.a-z0-9]", "");
// 3단계. 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
while (new_id.indexOf("..") != -1) {
new_id = new_id.replace("..", ".");
}
// 4단계. 마침표(.)가 처음과 끝에 위치하고 있다면 삭제
if (new_id.startsWith(".")) {
new_id = new_id.substring(1);
}
if (new_id.endsWith(".")) {
new_id = new_id.substring(0, new_id.length() -1);
}
// 5단계. 빈 문자열이라면 a를 대입
if (new_id.isEmpty()) {
new_id = "a";
}
// 6단계. 길이가 16자 이상이면 15글자 이후 삭제
if (new_id.length() > 15) {
new_id = new_id.substring(0,15);
if (new_id.endsWith(".")) {
new_id = new_id.substring(0, new_id.length() -1);
}
}
// 7단계. 길이가 2자 이하라면 마지막 문자를 반복 (길이가 3이 될 때까지)
while (new_id.length() < 3) {
new_id += new_id.charAt(new_id.length() -1);
}
return new_id;
}
}
정규표현식을 이용해서 해결한 능력자
class Solution {
public String solution(String new_id) {
String id = new_id.toLowerCase(); // 소문자로
id = id.replaceAll("[^-_.a-z0-9]", ""); //-_. 영문자 숫자만 남김
id = id.replaceAll("[.]{2,}", "."); // .2개 이상 .으로
id = id.replaceAll("^[.]|[.]$", ""); // 처음과 끝 . 제거
if(id.equals("")) // 빈 문자열이라면 a 추가
id += "a";
if(id.length() >= 16){ // 16자 이상이면 15자로
id = id.substring(0, 15);
id = id.replaceAll("^[.]|[.]$", ""); // 끝 . 제거
}
if(id.length() <= 2) // 2자 이하라면 3자까지 마지막 문자추가
while(id.length() < 3)
id += id.charAt(id.length() - 1);
return id;
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]JAVA - Level3. 코딩 테스트 공부 (2) | 2022.08.29 |
---|---|
[프로그래머스]JAVA - Level1. 성격 유형 검사하기 (0) | 2022.08.27 |
[프로그래머스]JAVA - Level2. 두 큐 합 같게 만들기 (0) | 2022.08.22 |
[프로그래머스]JAVA - Level2. 124 나라의 숫자 (0) | 2022.07.10 |
[프로그래머스]JAVA - Level3. N으로 표현 (0) | 2022.07.09 |