🔴 문제
🔵 풀이
func solution(_ n:Int64) -> Int64 {
var arr: [Character] = [] // 정수를 한글자씩 담을 리스트 생성
var str = String(n) // 스트링으로 변환한 정수를 str에 담기
var strNew: String = "" // 정렬된 리스트에서 한글자씩 붙일 스트링 변수
for i in str {
arr.append(i) // str을 한 글자씩 떼어서 arr에 담는 과정
}
arr.sort(by: >) // arr을 내림차순으로 정렬
for i in arr {
strNew += String(i) // 정렬된 리스트 원소 하나씩 떼어서 strNew에 붙이는 과정
}
var intNew: Int64 = Int64(strNew) ?? -1 // strNew를 정수형으로 변환하여 intNew에 담기
return intNew // intNew 반환
}
⭐️ empty collection으로 선언할 때 데이터 타입 명시
배열 변수를 empty collection '[]'으로 선언할 때는 꼭 데이터 타입을 명시해야 한다.
⭐️ sort() vs. sorted()
sort()와 sorted() 모두 값을 정렬하는 인스턴스 메소드이지만 약간의 차이가 있다.
<정의>
- sort() : 콜렉션을 정렬시킨다.
- sorted() : 정렬된 시퀀스의 요소를 반환한다.
따라서, 만약 정렬된 배열을 반환하고 싶다면 다음과 같이 할 수 있다.
<sort()를 쓸 경우> : 선 정렬 후 반환 | <sorted()를 쓸 경우> : 반환 |
arr.sort() return arr |
return arr.sorted() |
차이점 1 - 기존 값 변경 여부
sort()는 기존 값이 변경되지만 sorted()는 변경되지 않는다.
차이점 2 - string 적용 여부
string은 sorted()될 수 있지만 sort()되지 못한다.
Sequence는 범위가 무한하거나 유한하며 여러 번의 iterate를 보장하지 않는다.
Collection은 범위가 유한하며 Index로 element에 접근이 가능하고 여러번의 iterate를 보장한다. (출처: https://beepeach.tistory.com/202)
🔵 풀이 개선하기
sorted()가 정렬된 값을 바로 반환한다는 점을 이용한 한 줄 코드가 있었다...
unc solution(_ n:Int64) -> Int64 {
return Int64(String(String(n).sorted{ $0 > $1 }))!
}
{ $0 > $ 1} 클로저에 대한 부분은 공식 문서(링크)를 참고하면 된다.