본문 바로가기

iOS

Swift Joined()

*Joined() : 배열에 들어있는 여러 원소들을 하나로 묶을때 사용하는 메소드. (표준라이브러리에서 제공)

- joined(separator:) : 특정 요소를 추가하여 묶는 방법

let nestedNumbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let joined = nestedNumbers.joined(separator: [-1, -2])
print(Array(joined))
// Prints "[1, 2, 3, -1, -2, 4, 5, 6, -1, -2, 7, 8, 9]"

-joined() 

let ranges = [0..<3, 8..<10, 15..<17]

// A for-in loop over 'ranges' accesses each range:
for range in ranges {
  print(range)
}
// Prints "0..<3"
// Prints "8..<10"
// Prints "15..<17"

// Use 'joined()' to access each element of each range:
for index in ranges.joined() {
    print(index, terminator: " ")
}
// Prints: "0 1 2 8 9 15 16"

*프로그래머스 가장 큰 수 를 하는던 중 joined()라는 것을 써서 문제를 풀어봤다.

더보기

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예

numbersreturn
[6, 10, 2] 6210
[3, 30, 34, 5, 9] 9534330
import Foundation

func solution(_ numbers:[Int]) -> String {
    
    //var strArr = numbers.map{String($0)}.sorted(by: >)
    //var strInt = strArr.sorted{$0+$1 > $1+$0}.joined()
    
    let answer: String = numbers.map{String($0)}.sorted{$0+$1 > $1+$0}.joined() 
    
    return answer.first == "0" ? "0" : answer
}

나는 두줄로.....처리를 했었는데 한줄로 깔끔하게 할수도 있다. 

'iOS' 카테고리의 다른 글

Swift 싱클톤 패턴  (0) 2020.11.10
Swift 구조체 vs 클래스  (0) 2020.04.13
Swift 프로토콜  (0) 2020.04.13
Swift 클로저  (0) 2020.04.06
Swift 메모리 관리  (0) 2020.04.03