문자열을 다른 문자열로 대조하여 변환하는 문제를 여러 가지 방법으로 풀어보았다. Swift에서 문자열 변환 작업을 효율적으로 처리할 수 있는 다양한 접근법을 익히는 좋은 기회였다.
가위는 2, 바위는 0, 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열
rsp가 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 반환하는 함수를 작성하는 문제입니다.제한사항
- 0 <
rsp의 길이 ≤ 100rsp와 길이가 같은 문자열을 반환해야 합니다.rsp는 숫자 0, 2, 5로 이루어져 있습니다.입출력 예
- 입력:
"205"- 출력:
"052"
for문과 조건문 사용가장 기본적인 접근법으로, for문과 조건문을 이용해 각 문자를 순회하며 치환한다.
import Foundation
func solution(_ rsp: String) -> String {
var result = ""
for char in rsp {
if char == "0" {
result += "5"
} else if char == "2" {
result += "0"
} else if char == "5" {
result += "2"
}
}
return result
}
각 문자에 대해 조건문을 사용하여 대응하는 값을 변환한다.
map 사용map을 이용하면 더 간결하게 문자열을 변환할 수 있다.
import Foundation
func solution(_ rsp: String) -> String {
return rsp.map { char in
switch char {
case "0": return "5"
case "2": return "0"
case "5": return "2"
default: return ""
}
}.joined()
}
map을 사용해 각 문자를 변환하고, joined()를 통해 문자열로 다시 합친다.Dictionary를 이용한 매핑딕셔너리를 사용해 매핑 관계를 정의하고, 이를 활용해 변환할 수 있다.
import Foundation
func solution(_ rsp: String) -> String {
let mapping: [Character: Character] = ["0": "5", "2": "0", "5": "2"]
var result = ""
for char in rsp {
if let mappedChar = mapping[char] {
result += String(mappedChar)
}
}
return result
}
zip을 이용한 매핑zip을 사용해 두 개의 배열을 매핑한 뒤 이를 통해 변환하는 방법도 있다.
import Foundation
func solution(_ rsp: String) -> String {
let keys = Array("025")
let values = Array("502")
let mapping = Dictionary(zip(keys, values), uniquingKeysWith: { $1 })
var result = ""
for char in rsp {
if let mappedChar = mapping[char] {
result += String(mappedChar)
}
}
return result
}
zip을 사용해 두 배열(keys, values)을 매핑하여 딕셔너리를 생성한 후, 이를 통해 각 문자를 변환했다.zip을 활용한 흥미로운 응용 예시로, 두 배열의 대응 관계를 쉽게 정의할 수 있었다.for문과 조건문은 이해하기 쉽지만 코드가 길어질 수 있다.map을 사용하면 더 간결하고 직관적으로 코드를 작성할 수 있다.Dictionary를 이용한 매핑은 매핑 관계가 복잡해질 때 매우 유용하며, 코드의 가독성을 높일 수 있다.zip을 통해 배열 간의 매핑을 정의하는 것도 좋은 접근 방법이지만, 이 문제에서는 조금 과한 느낌이 있다.이렇게 다양한 접근을 시도하면서 문제를 해결하는 여러 방법을 익혔다. 앞으로 유사한 변환 문제에서 적절한 방법을 선택해 사용할 수 있지 않을까....
zip 이거 아주 매력있어요,, 저두 자주 쓰거든요 아~ 얼른 열심히해서 zip 사야하는데,,