2021 KAKAO BLIND RECRUITMENT 신규아이디추천

Seungmin Lim·2022년 2월 6일
0

코딩문제연습

목록 보기
13/63

문제

2021 KAKAO BLIND RECRUITMENT 신규아이디추천

나의풀이

		    public String solution(String str) {
		    	String answer = "";
		    	//1,2.소문자 + 알파벳,. _ - 를 제외한 문자삭제
		    	str = str.toLowerCase().replaceAll("[^a-z0-9-_.]","");
		    	//3. 연속된 마침표 제거 + 4. 첫,끝 . 제거
		    	str = str + " ";//비교를위한 공백추가
		    	for(int i=0; i<str.length();i++) {
		    		if(!(str.charAt(i) == '.' && str.charAt(i) == str.charAt(i+1))) {
		    			answer += str.charAt(i);
		    		}
		    	}
		    	if(answer.charAt(0) == '.') answer = answer.substring(1);
		    	answer = answer.substring(0,answer.length()-1); //공백제거.
		    	if(!(answer.isBlank())&& answer.charAt(answer.length()-1) == '.') answer = answer.substring(0,answer.length()-1);
		    	
		    	//5.빈문자열일시 a대입
		    	if(answer.isBlank()) answer = "a";
		    	
		    	//6. 16글자 이상시 15까지만
		    	if(answer.length()>15) answer = answer.substring(0,15);
		    		if (answer.charAt(answer.length()-1) =='.') {
						answer = answer.substring(0,answer.length()-1);
					}
		    	//7. 2자 이하일시 끝에것 추가
		    	while(answer.length()<3) {
		    		answer += answer.charAt(answer.length()-1);
		    	}
		    	return answer;
		    }

풀이방법

문자열 다루는것의 총집합인것 같다..
다른분의 풀이를 보니 정규표현식을 이용해서 (temp 는 현재값)
temp = temp.replaceAll("[.]{2,}",".");
--> ' . ' 이 두개 이상있을시 . 으로 replace
temp = temp.replaceAll("^[.]|[.]$","");
--> ^ 는 문자열의 시작, $는 문자열의 끝을 뜻하고, |는 선택패턴. ""로 replace.

(선택 패턴이란?

| 문자를 이용하면 A | B 의 패턴으로 A 혹은 B에 매칭할 수 있다.
예를 들어 tomato와 potato에 모두 매칭하고 싶다면 tomato|potato 라고 쓸 수 있다.
선택 패턴은 이후에 등장하는 그룹 패턴과 관련하여 보다 강력하게 쓰일 수 있다.)

핵심키워드

  1. 중복을 제거할시에 빈 문자를 추가해서 비교한다.
  2. 정규표현식을 더 공부하자!

0개의 댓글