[Programmers] Lv.1 - 신규 아이디 추천 (Kotlin)

Dohyeon Ko·2021년 10월 7일
0

Programmers

목록 보기
1/8
post-thumbnail

문제 링크

문제 링크

문제 설명

풀이 언어

Kotlin

풀이 방법

주어진 7단계에 맞게 문자열을 조작한다.

  • 1단계 : kotlin의 toLowerCase()를 활용해서 소문자로 변환.

  • 2단계 : 정규화 혹은 조건문을 활용.

  • 3단계 : 역시 정규화 혹은 조건문을 활용.

  • 4단계 : 문자열의 처음과 끝을 확인하고 '.'인 경우에 제거.

  • 5단계 : 문자열.length == 0 인 경우 문자열에 a를 대입.

  • 6단계 : 문자열.length >= 16 인 경우 문자열.slice(0..15)로 문자열 변환. 마지막에 '.' 있는 경우 제거.

  • 7단계 : 문자열.length <= 2 인 경우 문자열에 plus.

결과

코드

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

        val reg1 = Regex("[a-z0-9-_.]")
        val reg2 = Regex("[.]{2,}")

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

        // 2단계
        for (e in answer) {
            if (reg1.containsMatchIn(e.toString())) {
                temp.append(e)
            }
        }

        // 3단계
        answer = temp.toString().replace(reg2, ".")

        // 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단계
        if (answer.isEmpty()) answer = "a"
        
        // 6단계
        if (answer.length >= 16) {
            answer = answer.slice(0..14)
        }
        
        // 6단계 : 4단계 과정을 한번 더 해주는 이유는 위 과정을 거치고 마지막 문자가 .인 경우 제거해주기 위함.
        if (answer.isNotEmpty() && answer.first() == '.') answer = answer.removeRange(0, 1)
        if (answer.isNotEmpty() && answer.last() == '.') answer = answer.removeRange(answer.length-1, answer.length)
        
        // 7단계
        while (answer.length <= 2) {
            answer += answer[answer.length - 1]
        }
        
        return answer
    }
}

새로 알게된 점

  • 정규화를 쓰기 위해선 regex 객체를 사용해야한다. 사용법은 작성한 정규식으로 regex 객체를 생성하고 regex.containsMatchIn(문자) 로 필터링한다. regex에 대해선 좀 더 공부해야겠다.

  • 조건문을 작성할 때 answer.first() == "." 이렇게 작성하니까 자꾸 오류가 뜨는 것이었다. 오류 내용은 자료형 불일치였다. char랑 string 뭐시기... answer.first() == '.' 로 수정하고 해결. 파이썬에서는 그냥 상관없이 사용했는데 주의해야겠다.

  • 문자열을 더 할 때 아무 생각없이 append를 사용했다가 오류 발생. 위 방법 역시 answer가 StringBuilder 가 아니라서 객체가 계속 생성되지만 일단은 저렇게 해결.

profile
티스토리로 옮겼어요! (https://codekodo.tistory.com)

0개의 댓글