알고리즘
[Swift 알고리즘] - 제일 작은 수 제거하기 (Programmers)
Peppo
2022. 11. 7. 23:15
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12935
문제 사진
내 풀이
func solution(_ arr:[Int]) -> [Int] {
guard arr.count > 1 else { return [-1] }
guard let index = arr.firstIndex(of: arr.min()!) else { return [-1] }
var result: [Int] = arr
result.remove(at: index)
return result
}
- 비교할게 없을때 [-1] return
- 최소값 구하기 min() 메서드
- 제일 작은값의 인덱스 구하기
- 구한 인덱스 삭제 remove(at:)
다른사람의 풀이
func solution(_ arr:[Int]) -> [Int] {
let min = arr.sorted(by: <)[0]
return arr.count == 1 ? [-1] : arr.compactMap({ return $0 != min ? $0 : nil })
}
solution([10,3,2,1])
// [10, 3, 2]
- 오름차순에서 첫번째 요소 값 추출 (즉 최솟값을 추출)
- arr 요소 하나씩 비교하면서 min이랑 같지 않은것만 출력
그런데 filter로 쓸 수 있지 않을까?
func solution(_ arr:[Int]) -> [Int] {
let min = arr.sorted(by: <)[0]
return arr.count == 1 ? [-1] : arr.filter { $0 != min }
}
가능하댜 🥹
다만 이유는 모르겠지만 내가 위에 풀었던것 보단 처리속도가 미세하게 느리다..
배운것
sorted(by:)
arr를 부등호에 따라 오름차순, 내림차순으로 정리해줍니다.
근데 ( < , > ) 어떤 방향으로 하면 오름차순이고 , 내림차순인지 헷갈리는 경우가 많은데
여기서 딱 정리 해보겠습니다!
저는 부등호 윗부분을 보고 판단합니다.
부등호 윗부분이 올라가고 있으니,
오름차순
부등호 윗부분이 내려가고 있으니,
내림차순
예제
let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let descendingStudents = students.sorted(by: >)
print(descendingStudents)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"
728x90