[JAVA 문제 풀이] 316. 신규 아이디 추천

프로그래머스 (72410)
Stupefyee's avatar
Jun 13, 2025
[JAVA 문제 풀이] 316. 신규 아이디 추천
notion image
notion image
 

내가 작성한 코드

class Solution { public String solution(String new_id) { String answer = new_id; // 1단계: 소문자로 변환 answer = answer.toLowerCase(); // 2단계: 알파벳 소문자, 숫자, '-', '_', '.' 제외한 문자 제거 answer = answer.replaceAll("[^a-z0-9-_.]",""); // 3단계: 연속된 . 하나로 합치기 answer = answer.replaceAll("[.]{2,}","."); // 4단계: 처음과 끝의 . 제거 answer = answer.replaceAll("^[.]|[.]$",""); // 5단계: 빈 문자열이면 "a"로 대체 if (answer.isEmpty()) { answer = "a"; } // 6단계: 16자자 이상이면 자르기 if (answer.length() >= 16) { answer = answer.substring(0, 15); // 마지막 문자가 .이면 제거 if (answer.charAt(answer.length() - 1) == '.') { answer = answer.substring(0, answer.length() - 1); } } // 7단계: 길이가 2자 이하이면 마지막 문자를 반복하여 길이를 3으로 맞추기 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; } // 문자열이 비어있으면 a로 채우는 메서드 private KAKAOID noBlank() { s = s.isEmpty() ? "a" : s; return this; } // 문자열의 길이가 16자 이상이면 15자로 줄이고, 마지막에 .이 있으면 제거하는 메서드 private KAKAOID noGreaterThan16() { if (s.length() >= 16) { s = s.substring(0, 15); } s = s.replaceAll("[.]$", ""); return this; } // 문자열의 길이가 2자 미만이면 마지막 문자를 반복하여 3자로 만드는 메서드 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; } } }
 
Share article

stupefyee