티스토리 뷰

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. 비교할게 없을때 [-1] return
  2. 최소값 구하기 min() 메서드
  3. 제일 작은값의 인덱스 구하기
  4. 구한 인덱스 삭제 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]

 

  1. 오름차순에서 첫번째 요소 값 추출 (즉 최솟값을 추출)
  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