티스토리 뷰
algorithm/programmers
[프로그래머스/자바] 신규 아이디 추천 - 2021 KAKAO BLIND RECRUITMENT
hrniin 2022. 11. 18. 02:27728x90
https://school.programmers.co.kr/learn/courses/30/lessons/72410
2021 KAKAO BLIND RECRUITMENT Level 1 문제다.
정규 표현식을 잘 몰라서 지저분하게 코드를 작성했다.
Level 1이기 때문에 딱히 설명할 것 없이 코드를 보면 이해가 된다.
for문으로 하나하나 다 탐색해 숫자, 영어, -, _, . 이외의 문자가 들어올 경우
일단 *로 치환하고, 나중에 String의 replaceAll을 통해서 *를 ""(빈 문자열)로 없앴다.
StringBuilder와 String을 번갈아서 사용한 이유는
String에는 특정 인덱스의 문자를 다른 문자로 교체해주는 기능의 메소드가 존재하지 않고, (StringBuilder의 setCharAt)
StringBuilder에는 특정 문자를 다른 문자로 교체해주는 기능의 메소드가 존재하지 않아서였다. (String의 replaceAll)
지저분한 코드를 제출하고 다른 분들의 코드를 보니,
정규표현식을 사용하면 깔끔하게 코드를 작성할 수 있다는 걸 깨달았다.
문자열 관련 문제를 풀때 유용하게 쓰일 것 같으니
자주 쓰이는 건 꼭 익혀둬야겠다! (아래 링크는 나중에 다시 보려고..)
class Solution {
public String solution(String new_id) {
// 1단계
String ans = new_id.toLowerCase();
StringBuilder sb = new StringBuilder(ans);
for(int i=0;i<sb.length();i++) {
char c = sb.charAt(i);
// 2단계
if((c < 'a' || c > 'z') && (c < '0' || c > '9') && c != '-' && c != '_' && c != '.')
sb.setCharAt(i, '*');
}
ans = sb.toString().replaceAll("\\*", "");
// 3단계
ans = ans.replaceAll("\\.{2,}", "\\.");
sb.setLength(0);
sb.append(ans);
// 4단계
if(sb.charAt(0) == '.')
sb.setCharAt(0, '*');
if(sb.charAt(sb.length() - 1) == '.')
sb.setCharAt(sb.length() - 1, '*');
ans = sb.toString().replaceAll("\\*", "");
sb.setLength(0);
sb.append(ans);
// 5단계
if(sb.length() == 0)
sb.append("a");
// 6단계
else if(sb.length() >= 16) {
sb.setLength(15);
if(sb.charAt(sb.length() - 1) == '.')
sb.setCharAt(sb.length() - 1, '*');
sb = new StringBuilder(sb.toString().replaceAll("\\*", ""));
}
// 7단계
if(sb.length() <= 2)
while(sb.length() < 3)
sb.append(sb.charAt(sb.length() - 1));
return sb.toString();
}
}
728x90
'algorithm > programmers' 카테고리의 다른 글
[프로그래머스/자바] 메뉴 리뉴얼 풀이 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.11.19 |
---|---|
[프로그래머스/자바] 순위 검색 풀이 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.11.19 |
[프로그래머스/자바] 양궁대회 풀이 - 2022 KAKAO BLIND RECRUITMENT (0) | 2022.11.17 |
[프로그래머스/자바] 주차 요금 계산 풀이 - 2022 KAKAO BLIND RECRUITMENT (0) | 2022.11.17 |
[프로그래머스/자바] k진수에서 소수 개수 구하기 풀이 - 2022 KAKAO BLIND RECRUITMENT (0) | 2022.11.17 |