TIL/알고리즘

02/07 알고리즘 공부(36) - 문자열 다루기 기본

sos000303 2024. 2. 7. 14:39
728x90

조건

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.( s는 길이 1 이상, 길이 8 이하인 문자열입니다, s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.)

알고리즘 예상

  1. 문자열의 길이를 확인하는 조건문
  2. 문자열에 문자의 존재를 확인

 

초기 코드

class Solution {
    fun solution(s: String): Boolean {
        var answer = true
        return answer
    }
}코드가여기있어요

 

내 코드

class Solution {
    fun solution(s: String): Boolean {
        var answer = true
        var lengthCheck = true
        var charCheck = true
        when (s.length){
            4 -> lengthCheck = true
            6 -> lengthCheck = true
            else -> lengthCheck = false
        }
        if(s.toCharArray().all{ it.isDigit() }) charCheck = true
        else charCheck = false

        if(charCheck && lengthCheck) answer = true
        else answer = false

        return answer
    }
}

처음에는 위와 같이 코드를 짰지만 코드가 길고 읽기 힘들어보여 줄여보기로 했다.

class Solution {
    fun solution(s: String): Boolean = if((s.length == 4 || s.length == 6) && s.toCharArray().all { it.isDigit() }) true else false
}

if문 하나에 or과 and를 이용해 두 조건의 확인을 넣었다. 만들고 보니 코드블럭이 필요없을 것 같아 등식으로 줄여보았다.

다른 사람의 풀이

class Solution {
    fun solution(s: String) = (s.length == 4 || s.length == 6) && s.toIntOrNull() != null
}
class Solution {
    fun solution(s: String): Boolean 
    {
        val length = s.filter { it.isDigit() }.length
        return (length == 4 || length == 6) && length == s.length
    }
}

개선점 또는 배운점

  1. ==은 비교연산자기 때문에 true나 false를 반환한다. 따라서 if문이 필요가 없었다.
  2. toIntOrNull이라는 함수를 이용해 수가 아니면 null을 반환해서 확인하는 방법을 배웠다.

 

개선된 코드

class Solution {
    fun solution(s: String): Boolean = (s.length == 4 || s.length == 6) && s.toCharArray().all { it.isDigit() }
}
728x90