1678. Goal Parser Interpretation
문제 설명
- 세상에 3개의 문자밖에없다고 가정한다.
- 그게
G
,()
,(al)
이렇게 총 3개- 그래서 이거를 마구잡이로 섞어넣은 문자열을 G O AL로 치환해서 나타내면 끝
문제 풀이
- 이전에 비슷한 문제를 풀었던 경험이 있어서 이거는 Replacing으로 대체를 해주면 된다고 생각은했는데, 처음에 아래와 같이 에러가 떠서 좀 당황했던 것 같다.
- 당시 분명히 String에 쓰는것으로 기억을 하고 있었는데, no member Method라고 나와버리니, 바로 공식문서를 찾아봤던 것 같다.
replacingOccurrences 공식문서 를 보면 NSString
의 인스턴스 메소드로 정의되어있다. 그러면 NSString
과 String
은 다른걸까? 를 이따가 다뤄보도록하고 일단은
import Foundation
을 추가하면 정상적으로 사용할 수가 있게 된다.
최종 제출 코드
import Foundation
class Solution {
func interpret(_ command: String) -> String {
return command.replacingOccurrences(of: "()",
with: "o")
.replacingOccurrences(of: "(al)", with: "al")
}
}
타인의 코드
class Solution {
func interpret(_ command: String) -> String {
let arr = Array(command)
var str = ""
var i = 0
while i < arr.count {
if arr[i] == "G" {
str += "G"
i += 1
} else if arr[i] == "(" {
if arr[i+1] == ")" {
str += "o"
i += 2 // Skip "()"
} else {
str += "al"
i += 4 // Skip "(al)"
}
}
}
return str
}
}
이게 초기에 생각했던 풀이였다.
(
이 나오면 이게(al)
인지()
인지 판단하면서 문자열을 완성시켜주는 로직이다. 아마 문제가 크게 복잡한 문제가 아니라서 이렇게 직관적인 풀이가 제일 빠른 풀이였던 것 같다.
NSString VS String ?
String
NSString
Foundation
프레임워크에 속함.그러면 왜 import Foundation을 하니까 가능했던 것?
Swift는 Foundation을 임포트하면 String과 NSString 간의 브릿지(bridge)를 자동으로 제공 String에서도 NSString의 메서드를 호출할 수 있게 도와준다고 한다.
브릿지를 자동으로 제공한다는게 뭔소리인데 ? -> 브릿징
String
과NSString
을 자동으로 변환해주는 것import Foundation
을 하면String
이NSString
로 암묵적 캐스팅되어NSString
의 메서드를 사용할 수 있다고한다.
"
결국 정리하자면 내가 쓰려했던 메소드는 NSString
의 메소드이고, String
타입에서 이걸 사용하려면 import Foundation
을 통해서 String
을 NSString
으로 브릿징(NSString으로 캐스팅)시켜줘서 사용할 수 있는 것 !