알고리즘/프로그래머스

2021 카카오공채 - 신규 아이디 추천

programmers.co.kr/learn/courses/30/lessons/72410?language=java

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

1. 유형

 

문자열

 

2. 풀이

 

이 문제는 모듈화가 중요합니다. 그래야 나중에 실수했을 때, 디버깅이 편합니다.

각 단계별로 함수를 만들어서 시키는대로 구현합니다.

딱히, 특별한 구현법이 없는거 같습니다.

 

문자열을 수정하기 편하게 ArrayList 자료구조를 사용하고, 끝 부분부터 탐색하며 remove를 해줬습니다.

 

3. 디버깅 실수

case4부분에서 index 에러가 생겼습니다. 문자열 길이가 0인경우 예외처리 실수가 있었습니다.

 

4. 풀이

import java.util.ArrayList;

class Solution {
    static String new_id;
	static ArrayList<Character> str;
    static String res;
    static void case1() {
		int size = str.size();
		for (int i = size - 1; i >= 0; i--) {
			if (str.get(i) >= 'A' && str.get(i) <= 'Z') {
				char c = (char) (str.get(i) + 32);
				str.remove(i);
				str.add(i, c);
			}
		}
	}

	static void case2() {
		int size = str.size();
		for (int i = size - 1; i >= 0; i--) {
			char c = str.get(i);
			if ((c >= 'a' && c <= 'z') || c == '-' || c == '_' || c == '.' || (c >= '0' && c <= '9')) {
				continue;
			} else {
				str.remove(i);
			}
		}

	}

	static void case3() {
		int size = str.size();
		for (int i = size - 1; i >= 1; i--) {
			char a = str.get(i);
			char b = str.get(i - 1);
			if (a == '.' && b == '.') {
				str.remove(i);
			}
		}
	}

	static void case4() {
		int size = str.size();
		if (size > 0) {
			char a = str.get(size - 1);
			if (a == '.')
				str.remove(size - 1);
		}
		size = str.size();
		if (size > 0) {
			char b = str.get(0);
			if (b == '.')
				str.remove(0);
		}
	}

	static void case5() {
		int size = str.size();
		if (size == 0)
			str.add('a');
	}

	static void case6() {
		int size = str.size();
		if (size >= 16) {
			for (int i = size - 1; i > 14; i--) {
				str.remove(i);
			}
		}
		case4();

	}

	static void case7() {
		int size = str.size();
		char last_char = str.get(size - 1);
		if (size <= 2) {
			for (int i = 0; i < 3 - size; i++) {
				str.add(last_char);
			}
		}
	}
    static void print(){
        res ="";
        for (char c : str) {
			res+=c;
		}
    }
    public String solution(String new_id) {
        String answer = "";
        str = new ArrayList<>();
		for (int i = 0; i < new_id.length(); i++) {
			str.add(new_id.charAt(i));
		}
        case1();
		case2();
		case3();
		case4();
		case5();
		case6();
		case7();
        print();
        return res;
    }
}