본문 바로가기

알고리즘/프로그래머스 문제풀이

프로그래머스 신규아이디 추천(lv2, kotlin)

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 분석

  • 사용자가 입력한 문자열을 주어진 단계에 맞춰 가공하는 문제
  • 그냥 단계에 맞춰 구현만 잘 해주면 됨

정답코드

class Solution {
    fun solution(new_id: String): String {
        var answer: String = ""
        //1단계
        val low_id = new_id.toLowerCase()
        //2단계
        for(i in 0 until low_id.length){
            var ch = low_id[i]
            if(ch.isLetterOrDigit() || ch == '-' || ch == '_' || ch == '.'){
                answer += ch
            }
        }
        //3단계
        while(answer.indexOf("..") != -1){
            answer = answer.replace("..", ".")
        }
        //4단계
        if(!answer.isEmpty() && answer[0] == '.'){
            answer = answer.substring(1)
        }
        if(!answer.isEmpty() &&answer[answer.length -1] == '.'){
            answer = answer.substring(0, answer.length -1)
        } 
        //5단계
        if(answer == "")
            answer = "a"
        //6단계
        if(answer.length > 15){
            answer = answer.substring(0, 15)
            if(answer[0] == '.'){
               answer = answer.substring(1)
            }
            if(answer[answer.length -1] == '.'){
                answer = answer.substring(0, answer.length -1)
            } 
        }

        //7단계
        if(answer.length <= 2){
            while(answer.length < 3){
                answer += answer[answer.length-1]
            }
        }
        return answer
    }
}

정규표현식과 코틀린의 내장함수를 활용하면 더 깔끔한 코드가 될 것같은데 아직 잘 다루지못해 보편적인 구현방법으로 풀었다..