[ Programmers ] 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천 (Java)

ma.caron_g·2021년 12월 5일
0

Lv.1 - Programmers (완성)

목록 보기
73/74
post-thumbnail

1. Problem 📃

[ 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천 ]

https://programmers.co.kr/learn/courses/30/lessons/72410

  • 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
  • 2단계 newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 * 문자를 제거합니다.
  • 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
  • 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
  • 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
  • 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
    만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
  • 7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.



2. Constraint 🔗



3. Solution 🔑

문제에 주어진 1단계부터 7단계까지 차례대로 알고리즘을 작성하면 해결할 수 있다.
(코드에 주석으로 표시해놓음)


4. Code 💻

import java.util.ArrayList;
import java.util.List;

class Solution {
	public String solution(String new_id) {
		String answer = "";
		char word[] = new char[new_id.length()];

		
			// 1단계 : 소문자로 변경
			new_id = new_id.toLowerCase();
			word = new_id.toCharArray();

			ArrayList<String> list = new ArrayList<String>();

			for (char i : word) {
				list.add(i + "");
			}
			
			
			// 2단계 : 소문자, 숫자(0~9), '-', '_', '.' 이면
			for (int i = 0; i < list.size(); i++) {
				char temp = (char) (list.get(i).charAt(0));
				if ((temp >= 'a' && temp <= 'z') || (temp >='0' && temp <='9') || (temp == '-' || temp == '_' || temp == '.')) {
					continue;
				}
				else {
					list.remove(i);	
					i--;
				}
			}
			
			
			
			// 3단계 : 마침표(.)가 두개 이상이면 .하나로 변경.
			for (int i=0; i<list.size()-1; i++) {
				char temp = (char) (list.get(i).charAt(0));
				if (temp == '.' && list.get(i + 1).charAt(0) == '.') {
					list.remove(i);
					i--;
				}
			}
			
			
			
			// 4단계 : 마침표(.)가 맨 앞이나 뒤에 있을 때 삭제.
			if (list.get(0).charAt(0) == '.') {
				list.remove(0);
			}
			else if (list.get(list.size() - 1).charAt(0) == '.') {
				list.remove(list.size() - 1);
			}
				
	
			
			// 5단계 : 삭제하고 글자가 빈문자열이면 a 추가 
			if (list.size()== 0) {
				list.add("a");
			}
			
			
			
			// 6단계 : 글자 길이가 15글자를 초과하면
			if (list.size() > 15) { 
				for (int i = 15; i < list.size(); i++) {
					list.remove(i); 
					i--;
				}
			}
				//제거 후 마지막 글자가 '.' 이라면 삭제.
			if (list.get(list.size() - 1).charAt(0) == '.') { //
				list.remove(list.size()-1);
			}
			
			// 7단계 : 글자수가 2자 이하면 마지막 문자를 붙여서 3자를 만들어줌 
			if (list.size() < 3) {
				char temp = list.get(list.size() - 1).charAt(0);
				while(list.size()<3) {
						list.add(temp + "");
				}
			}
			for(String str:list){
				answer += str;
			}
		return answer;

	}
}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글