본문 바로가기
Kotlin/Exercise

Isogram인지아닌지 판단하기

by 봄석 2019. 2. 24.

Isogram인지아닌지 판단하기


isogram이란 ?

아이 서 그램 (또한 "패턴이 아닌 단어"로 알려진)는이다 logological 반복 편지 쓰기없는 단어 나 구문 용어. 또한 어떤 사람들은 각 문자가 같은 횟수만큼 나타나는 단어 나 구를 의미하기도합니다. 반드시 한 번만 쓰는 것은 아닙니다. [1] 편리한 단어 자체가있어 단어 모두 감각의 아이 서 그램이다


testCode

@RunWith(Parameterized::class)
class IsogramTest(val input: String, val expectedOutput: Boolean) {
    companion object {
        @JvmStatic
        @Parameterized.Parameters(name = "{index}: isogram({0})={1}")
        fun data() = listOf(
            arrayOf(""true),
            arrayOf("isogram"true),
            arrayOf("eleven"false),
            arrayOf("subdermatoglyphic"true),
            arrayOf("Alphabet"false),
            arrayOf("thumbscrew-japingly"true),
            arrayOf("six-year-old"true),
            arrayOf("Emily Jung Schwartzkopf"true),
            arrayOf("accentor"false)
        )
    }
    @Test
    fun test() {
        assertEquals(expectedOutput, Isogram.isIsogram(input))
    }
}




1. 정규식으로 중복이 있는지 찾기

 object Isogram {
        fun isIsogram(input: String): Boolean {
            val macher = Pattern.compile("[a-z]").matcher(input.toLowerCase())
            val atozGroup = mutableListOf<String>()
            while (macher.find()) {
                if (!atozGroup.contains(macher.group()))
                    atozGroup.add(macher.group())
                else return false
            }
            return true
        }
        
    }




2. toSet으로 중복찾기

  object Isogram {
     fun isIsogram(input: String= input.toLowerCase()
         .filter {char->
             char.isLetter()
         }.let {
             it.toSet().size==it.length
         }
    }


1) toLowerCase로 소문자변경하기

2) filter와 Char.isLetter() 으로 문자만 필터

3) toSet() - > 중복이제거된 요소 리턴

toSet의 사이즈와 전체 length를 비교하여

같으면 true 아니면 false

'Kotlin > Exercise' 카테고리의 다른 글

윤년 찾기  (4) 2019.03.03
Hamming -DNA 차이  (2) 2019.03.03
영어에서 돼지 라틴어로 번역하기  (2) 2019.02.24
Raindrop - 숫자를 문자열로 변환하기  (2) 2019.02.23
Pangram인지 판단하기  (4) 2019.02.23

댓글