[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - "신규 아이디 추천" (Java)
https://programmers.co.kr/learn/courses/30/lessons/72410
난이도 : Level1
카카오에서 자주 출제되는 유형인 문자열 다루는 문제입니다. String 클래스의 메소드와 정규표현식을 잘 사용한다면 굉장히 쉽게 풀 수 있는 문제이지만, 정규표현식을 잘 모른다면 시간이 좀 걸릴 것 같습니다.
문제에 주어진 각 단계의 조건에 맞춰서 문제를 해결해 나가면 풀 수 있습니다.
1단계) 소문자로 치환 -> toLowerCase()
2단계) 소문자, 숫자, 빼기( - ), 밑줄( _ ), 마침표( . )를 제외한 모든 문자 제거 -> 정규표현식
3단계) 마침표( . )가 2번 이상이면 하나로 치환 -> 정규표현식
4단계) 마침표( . )가 처음과 끝에 위치하면 제거 -> 정규표현식
5단계) 빈 문자열이라면, "a" 대입 -> if문
6단계) 16자 이상이면, 첫 15개의 문자를 제외한 나머지 문자 제거. 다시 4단계 실행. -> substring()
, 정규표현식
7단계) 2자 이하라면, 마지막 문자를 길이가 3이될 때까지 추가 -> while문
- String solution(String new_id)
new_id를 입력받고 각 단계별로 요구하는 조건을 구현합니다. 마지막으로 조건에 맞게 수정된 new_id를 다시 return 합니다.
1단계
toLowerCase()
=> 영어 대문자를 소문자로 치환합니다.
2단계
replaceAll
메소드는 좌측에 정규표현식에 해당하는 조건을 작성하고 이 값이 true
값이면, 우측에 있는 문자열로 치환합니다. replace
메소드도 있지만 이 메소드는 정규표현식을 조건에 작성할 수 없어 replaceAll
메소드를 사용합니다. 맨 앞에 ^
연산자는 논리 연사자 !
과 유사합니다. 문자열에서 - _ . 0~9 a~z
에 해당하지 않는 문자는 true
값을 반환하여 우측에 있는 ""값으로 치환합니다. 즉, 제거하는 것입니다.
3단계
"[.]{2,}"
은 [ ] 괄호 안의 문자가 최소 2개 이상이라는 의미를 나타냅니다. 범위를 정하고자 하면 {2,5}
와 같이 , 뒤에 숫자를 적어주면 됩니다.
4단계
"^[.]|[.]$"
에서도 ^
연산자가 사용됩니다. 하지만 2단계에서 사용한 것과는 다릅니다. [ ] 괄호 안에 사용되는 ^
는 논리 연산자 !
과 유사한 성질을 갖지만 [ ] 괄호 밖에 사용 되는 ^
연산자는 시작을 나타냅니다. 즉, 문자열이 마침표로 시작하면 true
값을 반환합니다. |
연산자는 ||
연산자와 유사한 or의 의미를 갖고 있습니다. $
연산자는 ^
연산자와 반대로 [ ] 괄호 안의 문자로 끝나는 경우 true
를 반환합니다. 즉, 마침표로 시작하거나 마침표로 끝나면 이 정규표현식은 true
를 반환하고 우측에 있는 ""(빈 값)로 치환합니다.
5단계
길이가 0이면 "a" 값을 넣어줍니다.
6단계
if문을 통해 조건을 작성하고 substring
메소드로 문자열을 잘라냈습니다. 그 후 4단계에서 사용했던 정규표현식을 다시 한번 사용했습니다.
7단계
마지막 문자를 charAt
메소드를 통해 가져오고 while 문을 통해 조건을 만들어준 다음 +=
연산자로 뒤에 더해줬습니다.
코드
import java.util.ArrayList;
class Solution {
public static String solution(String new_id) {
// 1단계
new_id = new_id.toLowerCase();
// 2단계
new_id = new_id.replaceAll("[^-_0-9a-z.]", "");
// 3단계
new_id = new_id.replaceAll("[.]{2,}", ".");
// 4단계
new_id = new_id.replaceAll("^[.]|[.]$", "");
// 5단계
if(new_id.length() == 0) {
new_id = "a";
}
// 6단계
if(new_id.length() >= 16) {
new_id = new_id.substring(0, 15);
new_id = new_id.replaceAll("^[.]|[.]$", "");
}
// 7단계
char last = new_id.charAt(new_id.length()-1);
while(new_id.length() <= 2) {
new_id += last;
}
return new_id;
}
}
피드백 환영합니다.
'문제 풀이 > Java' 카테고리의 다른 글
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - "합승 택시 요금" (Java) (dijkstra, floydWarshall) (0) | 2021.09.07 |
---|---|
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - "순위 검색" (Java) (0) | 2021.09.06 |
[백준] 14503번 - "로봇 청소기" (Java) (3) | 2021.02.28 |
[백준] 14502번 - "연구소" (Java) (0) | 2021.02.27 |
[백준] 15681번 - "트리와 쿼리" (Java) (0) | 2021.02.26 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - "합승 택시 요금" (Java) (dijkstra, floydWarshall)
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - "합승 택시 요금" (Java) (dijkstra, floydWarshall)
2021.09.07 -
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - "순위 검색" (Java)
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - "순위 검색" (Java)
2021.09.06 -
[백준] 14503번 - "로봇 청소기" (Java)
[백준] 14503번 - "로봇 청소기" (Java)
2021.02.28 -
[백준] 14502번 - "연구소" (Java)
[백준] 14502번 - "연구소" (Java)
2021.02.27