나의 답)
import Foundation
func solution(_ arr:[String]) -> String {
return arr.joined(separator: "")
}
사실 이것도 뭔가 메서드를 이용하는게 아닐까.. 하고 파이썬으로 푸는 방법을 검색해봤다.
근데 파이선에서는 join
이라는 메서드로 이용하길래
파이썬이랑 swift
는 비슷하니 구글에 검색해봤더니,
바로 joined
메서드가 나왔다.
공식문서까지 확인하니 매우 흡사.. 아니 똑같았다.
[ 공식문서 ]
내용을 번역 해봤다.
시퀀스의 요소를 연결하고 각 요소 사이에 주어진 구분 기호를 추가하여 새로운 문자열을 반환합니다. 라고 한다
.....음. 역시 코드를 직접 써봐야겠다.
예시코드를 가져온 걸 이모지 변경만 해보았다. 잘 나온다.
보니까 separator
값 안에 뭔가를 넣으면 문자열마다 들어가는 것 같다.
알아보니,
separator
파라미터는 joined(separator:)
메서드에서 각 요소 사이에 삽입할 구분 문자열을 지정하는 데 사용된다고 한다.
이 파라미터를 통해 각 요소가 특정 문자열로 구분되어 연결되게 할 수 있는데,
예를 들자면 요소들을 쉼표나 공백, 또는 나처럼 이모지로 나눠 연결하고자 할 때 활용되는 것이다.
이제 이모지를 빼고 빈 공백 없이 "" 만 했더니,
오오..... 코딩테스트에서 원하는 답과 똑같이 나왔다.
바로 적용해보자.
리턴값에 넣기만 하면 될 것 같다.
아 굿 !!
아 그리고 joined()
는 컬렉션 요소가 문자열일 때만 사용 가능하다고 하니,
만약 다른 타입 (Int나 Double)
의 배열을 연결하려면 먼저 문자열 배열로 변환해야 한다고 한다.
만약 String
배열인 ["a", "b", "c"]
같은 경우는 joined()
메서드를 바로 사용할 수 있지만,
Int
배열 [1, 2, 3]
과 같은 비문자열 타입 배열에서는 바로 사용할 수 없다..
이유는 joined()
메서드가 각 요소를 하나의 문자열로 합치는 작업을 수행하기 때문에 요소들이 미리 문자열
이어야 한다는 이유인 것이다.
만약 문자열이 아닌 타입의 배열에 joined()
를 사용하면 컴파일 오류가 발생한다.
삐 - !
만약 내가 Int
배열이나 다른 타입의 배열을 joined()
로 연결하고 싶다면 ..!
각 요소를 먼저 문자열로 변환해줘야 한다.
이 땐 고차함수인 map
을 사용해 배열의 각 요소를 문자열로 변환한 후,
joined()
메서드를 사용할 수 있다!
let numbers = [1, 2, 3]
let stringNumbers = numbers.map { String($0) }
let joinedString = stringNumbers.joined(separator: "🥸")
print(joinedString) // "1🥸2🥸3"
numbers.map { String($0) }
를 사용하여 Int
배열 [1, 2, 3]
을 ["1", "2", "3"]
으로 변환해준 뒤,
그 후 는 새로운 함수를 만들어 stringNumbers.joind()
메서드를 이용했다.
추후 비슷한 문제가 나오면 그 땐 바로 응용 할 수 있을 것 같다.
검색으로 발견한 joined
메서드를 이해하고 배열 요소를 하나의 문자열로 합치는 방법을 배우게 되었는데,
separator
파라미터로 문자열을 설정해 각 요소 사이에 특정 구분자가 들어가도록 만들 수 있음을 알게 되었다.
문자열이 아닌 타입의 배열을 joined()
메서드로 연결하려면, 먼저 배열을 문자열로 변환해야 한다는 것도 배웠다.
그래서 joined
메서드가 다른 타입을 문자열로 변환해야 하는 상황을 자세히 이해해보고 싶었다.
그러다 { String($0) }
구문을 통해 쉽게 변환할 수 있다는 걸 알게 되었는데,
map
을 사용해 String()
으로 감싸기만 해도 문자열로 변환되었다는 사실도 신기했다.
이렇게 간단할수가..
앞으로 배열의 요소를 연결할 때 joined()
를 활용하면 이런식의 문제가 나올 땐 자신감이 붙을 것 같다!
계속 코테를 풀면서 다양한 타입 변환 메서드들도 알고 싶고 배우고 싶은 날이다.