프로그래머스 신규 아이디 추천 코틀린 - 2021 카카오 블라인드 채용
문제
사용자가 입력한 문자열(ID)에 대해서 1~7단계의 충족요건을 거친 뒤에 새로운 아이디를 추천해주면 되는 문제이다.
문자열 자르기, 정규식, 변환, 지우기 등 메소드에 대해서 익힐 수 있는 문제이다.
접근
- 1~7단계까지 순서대로 작성해야 하는 문제
- 2, 3단계는 정규식이 필요함
풀이
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
}
- 1단계 : 문자열을 소문자로 변경하는 메소드는 toLowerCase() (대문자는 toUpperCase())
- 2단계 : 문자열을 순회하면서 reg2정규식을 만족하는 문자열만 temp에 추가
- 3단계 : 문자열을 바꾸는 메소드인 replace() 를 통해 reg3 정규식을 만족하는 문자열을 “.”으로 변경
- 4단계 : 문자열이 null 일수도 있으니 EmptyCheck가 필요하다 first(), last()는 NULl일 경우 Exception이 발생한다. removeRange()을 통해 특정 인덱스의 문자를 지울 수 있음.
- 5단계 : 문자열의 isEmpty() 체크 메소드
- 6단계 : 문자열을 부분을 구하는 substring() 메소드 활용.
- 7단계 : 문자열 길이를 만족할 때 까지 마지막 문자열 추가
이 문제에서 String 다양한 메소드인 toLowerCase(), replace(), removeRange() 등 메소드를 알아야 한다. 또한, 정규식 표현인 숫자0-9 소문자 a-z 대문자 A-Z [.]{2,} 등은 다른 문제에서도 서비스에서도 자주 쓰이니 반드시 숙지해야 한다
결론
- 코틀린은 자바보다 다양한 메소드를 제공해준다 King틀린