components(separateBy:)

DEVJUN·2022년 7월 17일
0
post-thumbnail

오늘 풀어본 문제들 중 하나인데 문제 자체는 정말 쉬웠다.

// 내 풀이

func solution(_ s:String) -> Bool
{
    var pCnt = 0, yCnt = 0
    
    
    var ans:Bool = false
    
    for i in s {
        if i == "p" || i == "P" {
           pCnt = pCnt + 1
        } else if i == "y" || i == "Y" {
            yCnt = yCnt + 1
        }
    }
    
    if pCnt == yCnt {
        ans = true
    }else {
        ans = false
    }
    
    return ans
}


// 인상적인 풀이

import Foundation

func solution(_ s:String) -> Bool
{
    let string = s.lowercased()
    return string.components(separatedBy: "p").count == string.components(separatedBy: "y").count
}

내 풀이와 밑에 인상적인 풀이가 있는데 내 풀이는 그냥 기본이기 때문에 설명은 생략하고, 다른 사람이 푼 것을 좀 분석해 보았다. 우선 문자열 s를 p나 P y나 Y일 경우를 따져야 하기 때문에 경우를 줄이고자 전부 lowercased() 메소드를 통해 소문자로 바꾼뒤, components()라는 메소드를 통해서 문자열 s를 소문자로 바꾼 string 에서 p 혹은 y만을 모은 배열을 만들어 그 배열의 갯수(count)를 비교하여 리턴하고 있는 것이었다.

components(seperatedBy:) 주어진 집합의 문자로 나누어진 문자열의 부분 문자열을 포함하는 배열을 반환합니다.

또 이 풀이도 인상깊었다.

// 인상적인 풀이 2
import Foundation

func solution(_ s:String) -> Bool
{
    return s.lowercased().filter { $0 == "p" }.count == s.lowercased().filter { $0 == "y" }.count
}

기존에 알고있던 filter메소드를 통해 문자열 s의 문자 하나하나가 들어올 때마다 p나 y와 같을 경우를 필터링 하는 것인데 저 뒤에 count가 붙는 것을 처음 알았다... 😬

profile
🧑🏻‍💻iOS

0개의 댓글