문자열 다루기 기본

jericho·2023년 12월 20일

PS(문제풀이)

목록 보기
10/12

https://school.programmers.co.kr/learn/courses/30/lessons/12918

문자열의 길이가 4 또는 6이며 숫자로만 구성돼있는지 판별.

 - 풀이 1
class Solution { fun solution(s: String): Boolean {
    if (s.length != 4 && s.length != 6) return false
    try {
        s.first { it > '9' }
    } catch (e: Throwable) {
        return true
    }
    return false }
}

first를 사용해봤다. 조건에 맞는 첫 원소를 반환하는데, 조건에 해당하는 원소가 없으면 예외를 던진다. try catch 문으로 판별했다.

 - 풀이 2
class Solution { fun solution(s: String): Boolean {
    if (s.length != 4 && s.length != 6) return false
    s.forEach { if (it > '9') return false }
    return true }
}

정석적인 풀이다. forEach로 전체에 대해서 조건에 맞지 않으면 false를 반환했다.

 - 참고 풀이 3
class Solution { fun solution(s: String): Boolean =
    (s.length == 4 || s.length == 6) && s.all { it.isDigit() }
}

다른 풀이를 살펴보니 all이란 메서드가 있었다. 모든 원소에 대해 조건을 만족하는지를 판별한다. 불리언으로 반환되므로 if 필요없이 그대로 반환해줬다.

all과 유사한 메서드가 더 있는지 찾아보았다.

all, any, none, contains, containsAll

all: 모든 원소가 조건에 맞으면 참.
any: 조건에 맞는 원소가 하나라도 있으면 참.
none: 조건에 맞는 원소가 없으면 참.

contains: 주어진 원소를 포함하면 참.
containsAll: 주어진 원소들을 모두 포함하면 참.

다만 containsAll은 리스트나 셋 등 Collection<T> 타입에만 사용할 수 있다. 매개변수 역시 마찬가지이다. 다만 매개변수는 원본과 다른 타입의 컬렉션이어도 괜찮다. (참고로 배열은 Collection이 아니다!)

(contains는 any의 단순화 버전?이라고 생각할 수 있겠다.)
contains는 그대로 indexOf를 호출한다. 그 결과가 0 이상이면 true를 반환하는 것이다.

anynone은 매개변수 없이 사용하면 각각 !isEmpty()isEmpty() 이다. (iterator().hasNext() 와도 같다.)

0개의 댓글