머쓱이는 친구들과 369 게임을 하고 있습니다. 369 게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야 하는 숫자 order
가 매개변수로 주어질 때, 머쓱이가 쳐야 할 박수 횟수를 반환하는 함수를 작성해야 합니다.
order
≤ 1,000,000order | result |
---|---|
3 | 1 |
29423 | 2 |
func solution(_ order:Int) -> Int {
let a = String(order).filter { $0 == Character(String(3)) }.count
let b = String(order).filter { $0 == Character(String(6)) }.count
let c = String(order).filter { $0 == Character(String(9)) }.count
return a + b + c
}
filter
를 세 번 사용해 문자열을 반복 순회하며 3
, 6
, 9
각각을 개별적으로 세는 방식은 비효율적이다.filter
와 Character(String())
를 반복적으로 작성해 가독성이 떨어진다.func solution(_ order: Int) -> Int {
return String(order).filter { ["3", "6", "9"].contains($0) }.count
}
String(order)
로 정수를 문자열로 변환하여 각 자리의 숫자를 순회한다.filter
와 contains
활용:filter
를 한 번만 사용해, "3"
, "6"
, "9"
가 포함된 문자를 한 번에 검사한다.["3", "6", "9"]
배열에 대해 contains
를 사용하여 특정 문자 집합에 포함되는지 확인한다.filter
로 조건을 만족하는 문자만 남기고, 그 개수를 count
로 반환한다.filter
와 contains
를 함께 사용하면 간결하게 구현할 수 있다.