문제
문자열 내 p와 y의 개수
풀이
import Foundation
func solution(_ s:String) -> Bool {
var ans = false, countP = 0, countY = 0
for c in s {
if c == "p" || c == "P" {
countP += 1
} else if c == "y" || c == "Y" {
countY += 1
}
}
if countP == countY { ans = true }
return ans
}
🤔 FEEDBACK
- 처음엔
s.lowercased()
를 사용해서 소문자만 체크했는데 중간에 런타임 에러가 났었다.
- 공식문서
를 참고하니 시간복잡도가 O(n)
이라서 그랬나보다.
다른 풀이
import Foundation
func solution(_ s:String) -> Bool {
let string = s.lowercased()
return string.components(separatedBy: "p").count == string.components(separatedBy: "y").count
}
- 이건 보자마자 런타임 에러가 날 것 같은데 왜 안났지?! 싶었다.
- components의 시간복잡도
O(n)
으로 알고있었는데 아니었나? 싶어서 다시 공식문서를 봤다.
- 내가 찾은게 맞다면 시간복잡도에 관련한 내용은 없었다... ()이게 아니라 {}이거일 때 시간복잡도 였던 것 같기도 하고..
- 아직 스위프트 문법에 익숙하지 않다는 증거같다 .. 아무튼 궁금해서 찍어봤는데
- 이걸로 봐선 어떤게 더 좋은 코드다! 라고 확정할 수 없었다.
- 메모리든 런타임이든 결과가 들쑥날쑥하기 때문에..! 그래서 결론은 그냥 풀이 방법이 달랐던걸로