문자열을 다른 문자열로 대조하여 변환하는 문제를 여러 가지 방법으로 풀어보았다. 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 사야하는데,,