느낀점
이분탐색을 공부한 후 정렬 문제를 풀어보니
배열을 미리 정렬하는 과정을 통해
문제에 주어진 조건을 고려하지 않아도 되는 상황을 만들게 되는 것 같다
배열 쪼개기 array[1...2]
마지막 인덱스 endIndex, 첫번째 인덱스 startIndex (1부터 시작한다)
import Foundation
func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
return commands.map({(key) in
return array[(key[0]-1)...(key[1]-1)].sorted()[key[2]-1]
})
}
import Foundation
func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
let testCase: Int = commands.count
var mutableArray:[Int] = array
var answer: [Int] = []
for i in 0 ... testCase-1 {
let first = commands[i][0]
let second = commands[i][1]
let index = commands[i][2]
let newArray = mutableArray[first-1...second-1].sorted()
let answerValue = newArray[index-1]
answer.append(answerValue)
}
return answer
}
https://caution-dev.tistory.com/4
https://tngusmiso.tistory.com/25
// +로 문자열 결합해보기
print("a"+"b") //ab
let a = 123
print("\(123)"+"b") //123b
// 스트링으로 변환해서 610, 106을 생성한 후 내림차순으로 정렬하기
let sorted = numbers.sorted {"\($0)\($1)" > "\($1)\($0)"} //[6, 2, 10]
// 첫번째가 0인 경우는 [0, 0] 뭐 이런 경우이고, "00"이 아니라 "0"을 리턴해야한다
if sorted[0] == 0 {
return "0"
}
return sorted.reduce("") { $0 + "\($1)" } // 스트링으로 출력하기
//let b = sorted.map{String($0)}.joined() //상동
큰수가 기준이라면 내림차순으로 먼저 정렬할 수 있는데 그걸 생각 못한 것 같다
https://kocensd.github.io/프로그래머스-H-Index(Swift)/
https://mungto.tistory.com/27
func solution(_ citations:[Int]) -> Int {
let n = citations.count //n편
let sortedCitations = citations.sorted(by: >)
for (i, element) in sortedCitations.enumerated() {
if i >= element {
return i
}
}
// 인용횟수가 논문개수보다 많은 경우 [10, 50, 100]
return citations.count
}
https://velog.io/@msi753/함수형-프로그래밍-스위프트
https://velog.io/@msi753/함수형-프로그래밍-2-스위프트
https://velog.io/@msi753/함수형-프로그래밍-3-맵-필터-리듀스-스위프트
https://velog.io/@msi753/함수형-프로그래밍-4-모나드-스위프트
와 문법만 공부하면 진짜 기억이 하나도 안나는 구나...😅
그렇다고 안할수도 없고...😂
let reversed: [String] = names.sorted() { (first, second) in
return first > second
}
let reversed: [String] = names.sorted() {
return $0 > $1
}
let reversed: [String] = names.sorted() { $0 > $1 }
>
가 함수 이름
public func > <T: Comparable>(lhs: T, rhs: T) -> Bool
let reversed: [String] = names.sorted(by: >)
//후행 클로저 사용
doubledNumbers = numbers.map { $0 * 2 }
let evenNumber: [Int] = [0, 2, 4, 6, 8]
let oddNumber: [Int] = [1, 3, 5, 7, 9]
let multiplyTwo: (Int) -> Int = { $0 * 2}
let doubledEvenNumber = evenNumber.map(multiplyTwo)
let doubledOddNumber = oddNumber.map(multiplyTwo)
결합Combine
초깃값이 주어진다.
let numbers: [Int] = [1, 2, 3, 4, 5, 6, 7]
var result: Int = numbers.filter { $0.isMultiple(of: 2) }.map{ $0 * 3 }.reduce(0) { $0 + $1 }
print(result) //36
var array = [1,2,3,4]
array.reduce(0, +) // 숫자 합이 나타남. 문자열 합치기도 가능