https://school.programmers.co.kr/learn/courses/30/lessons/133499
문제를 어떻게 풀어야 할지 막막한 문제였다,,, 결국에 힌트를 보게 되었고 괜찮은 코드를 보았다.
class Solution {
fun solution(babbling: Array<String>): Int {
var answer: Int = 0
for (i in babbling.indices) {
if (babbling[i].contains("ayaaya") ||
babbling[i].contains("yeye") ||
babbling[i].contains("woowoo") ||
babbling[i].contains("mama"))
{
continue
}
babbling[i] = babbling[i].replace("aya", " ")
babbling[i] = babbling[i].replace("ye", " ")
babbling[i] = babbling[i].replace("woo", " ")
babbling[i] = babbling[i].replace("ma", " ")
babbling[i] = babbling[i].replace(" ", "")
if (babbling[i].isEmpty()) answer++
}
return answer
}
}
보다보니 호텔 예약 프로그램을 코딩할 때 문자열에 숫자를 포함시키지 않기 위해서 Regex라는 정규 표현식을 사용했던 기억이 났다. 그걸 적용해볼 수 있겠다. 생각이 들어 적용시켜보았다. but 역시 나만 그렇게 생각한게 아니였고 이미 획기적으로 코드량을 줄인 코드가 있었다. 한번 같이 보면서 regex 정규 표현식을 공부해보면 좋을 것 같다.
class Solution {
fun solution(babbling: Array<String>): Int {
var answer: Int = 0
var regexA = "aya|ye|woo|ma".toRegex()
var regexB = "ayaaya|yeye|woowoo|mama".toRegex()
answer = babbling.map{it.replace(regexB,"x")}.map{it.replace(regexA,"")}.count{it.isEmpty()}
return answer
}
}
이렇게 바꾸니 속도도 이전 코드보다 약 20%가량 더 빨라진 것 같다.
정규 표현식(Regex)
-> Regular Expression의 약자로 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어
이해가 확 와닿지는 않는다,,, 쉽게 말하자면 주로 어떤 문자열에서 특정한 조건의 문자열을 찾고 싶을 때 쓴다.
예를 들어서 회원가입이나 로그인을 받을 때 아이디나 비밀번호에서 최소 10자리에 숫자, 문자, 특수문자 각각 몇개씩 포함해서 작성해라! 에 따른 유효성 검사를 할 때도 사용가능하고 위에 문제처럼 해당 문자를 찾아 원하는 처리를 하고 싶을 때 자주 사용된다.
정규 표현식의 내용을 정리하려 했으나 그것 보다는 이해를 위한 영상 추천과 잘 정리해둔 블로그를 남겨 놓는게 더 좋을 것 같다는 생각이 들어 밑에 남겨두겠다.
정규 표현식 완전 처음이라면 영상
https://youtu.be/t3M6toIflyQ?si=7C24u9qSMgDXZvpQ
알고 있지만 문법을 확인하고 싶다면 밑에 블로그
'Code KATA' 카테고리의 다른 글
Programmers 체육복 with Kotlin (0) | 2023.12.14 |
---|---|
Programmers 숫자 짝꿍 with Kotlin (0) | 2023.12.13 |
Programmers 로또의 최고 순위와 최저 순위 with Kotlin (0) | 2023.12.11 |
Programmers 기사단원의 무기 with Kotlin (0) | 2023.12.08 |
Programmers 덧칠하기 with Kotlin (1) | 2023.12.07 |