본문 바로가기

알고리즘

[코딩 테스트] Level. 1 옹알이 (kotlin,코틀린)

728x90

 

 근래 들어 푼 문제 중에 가장 어려운 것 같다. 그래서 못 풀었다. 

정답을 보고 보니 내가 문제 이해력이 딸려서 못푼것 같다는 느낌도 들었지만,

 

이 문제의 핵심은 정규식 ( toRegex() ) 에 대해서 공부를 했느냐 안했느냐 가 핵심인 것 같다. 

 

정규식에 대해서 잘 설명해 주신 것 같다. 

https://yoon-dailylife.tistory.com/113

 

Kotlin) 정규 표현식 정리

정규 표현식 정규 표현식 또는 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어. 어떤 문자열에서 특정한 조건의 문자열을 찾고 싶을 때, 그 조건이 복잡한 경

yoon-dailylife.tistory.com

 

 

 두 가지 풀이법이 코드만 봐도 알 수 있게 잘 풀으신 것 같다. 

 

첫 번째 풀이법. 

private fun solution2(babbling: Array<String>) =
    babbling.count { it.matches("^(aya(?!aya)|ye(?!ye)|woo(?!woo)|ma(?!ma))+$".toRegex()) }

count{} 와 matches() 를 사용하여 풀으셨다.

^ 는 시작 $ 는 끝이라는 뜻 이었다. 위의 게시물을 보고 오면 이해가 좀 더 쉽다.

 

두 번째 풀이법.

private fun solution3(babbling: Array<String>): Int {
    val regex = "aya|ye|woo|ma".toRegex()
	return babbling.map { it.replace(regex, "") }.count {    it.isEmpty() }
}

map{} , replace() , count{} 를 사용하여 풀으셨다. 

 

정답을 알고나면 쉬워보이는데 문제 이해를 못한 것 + toRegex() 에 대해 모른 것이 못 푼 이유인 것 같다.

두 분다 대단.