프로그래머스 신규 아이디 추천 코틀린 - 2021 카카오 블라인드 채용

문제

사용자가 입력한 문자열(ID)에 대해서 1~7단계의 충족요건을 거친 뒤에 새로운 아이디를 추천해주면 되는 문제이다.

문자열 자르기, 정규식, 변환, 지우기 등 메소드에 대해서 익힐 수 있는 문제이다.

접근

풀이

1번

fun solution(new_id: String): String {
    var answer = new_id

    val reg2 = Regex("[a-z0-9-_.]") //소문자 a-z, 0-9숫자, -_. 특수기호의 존재
    val reg3 = Regex("[.]{2,}")  // . 특수기호가 2회이상 연속적으로 나오는지 확인하는 정규식

    //1단계 소문자
    answer = answer.toLowerCase()
    var temp = StringBuilder()

    //2단계 숫자, -, _ ., 소문자 빼고 지우기
    for (i in answer.indices) {
        if (reg2.containsMatchIn(answer[i].toString())) {
            temp.append(answer[i])
        }
    }

    answer = temp.toString()

    //3단계 연속된 . 2개 이상을 . 1개로
    answer = answer.replace(reg3, ".")

    //4단계 처음과 끝의 . 삭제
    if (answer.isNotEmpty() && answer.first() == '.') answer = answer.removeRange(0, 1)
    if (answer.isNotEmpty() && answer.last() == '.') answer = answer.removeRange(answer.length-1, answer.length)

    //5단계 빈 문자열이라면 "a"를 대입합니다.
    if (answer.isEmpty()) answer = "a"

    //6단계 길이 16이상이면 0~15까지만 살리고 나머지 제거. 제거후 마지막이 . 이거면 이것도 제거
    if (answer.length >= 16) {
        answer = answer.substring(0..14)

        if (answer.last() == '.') {
            answer = answer.removeRange(answer.length-1, answer.length)
        }
    }

    //7단계 길이가 2자 이하라면, 길이가 3이 될 때까지 마지막 문자 반복해서 끝에 붙입니다.
    while (answer.length <= 2) {
        answer = answer.plus(answer[answer.length-1])
    }

    return answer
}


이 문제에서 String 다양한 메소드인 toLowerCase(), replace(), removeRange() 등 메소드를 알아야 한다. 또한, 정규식 표현인 숫자0-9 소문자 a-z 대문자 A-Z [.]{2,} 등은 다른 문제에서도 서비스에서도 자주 쓰이니 반드시 숙지해야 한다

결론



Related Posts