아요 개발 일기

[프로그래머스] Level 1. 제일 작은 수 제거하기 본문

Algorithms/문제 풀이

[프로그래머스] Level 1. 제일 작은 수 제거하기

소진이 2023. 1. 19. 10:27

안녕하세용!!

어제 백신을 맞았더니 오늘 컨디션이 안 좋네용,,,ㅜㅜ

오늘은 바로바로 제일 작은 수 제거하기 문제를 풀어보았습니다!!


문제

'

내가 푼 풀이

문제 푸는데 자꾸 arr가 let 이어서 remove가 안 된다고 뜨더라구요ㅜ.ㅜ 

그래서 array 라는 변수에 할당해주었습니다!

 

array.remove ( - array 배열에서 삭제해라!

at: array.firstIndex( - array의 앞의 인덱스부터 탐색하여 

of: array.min()!)!) - arr.min에 해당하는 값을!

 

이런식으로 코드를 짰어요!! 그러면 최소 값만 잘 지워진답니다!

마지막은 배열의 갯수가 0 즉, 인덱스가 1개라면 -1 반환

아니라면 array 반환 하도록 해줬어요!

 

더디지만 점점 실력이 늘고있는거같은건 기분탓이겠져 ㅎㅎㅎㅎㅎ 

 


괜찮다고 생각된 풀이

 

let min = arr.sorted(by: <)[0]
     return arr.count == 1 ? [-1] : arr.compactMap({ return $0 != min ? $0 : nil })

compactMap?!!!!!! 잘 모르는 친구여서 데리고 왔어요!!

고차 함수라고 하는데,, 고차함수 공부할때도 그냥 map만 본 것 같은데.......

그래서 apple 공식문서에서 찾아왔어요!!!!

 

 

정의가  nil이 시퀀스의 각 요소로 주어진 변환을 호출한 결과가 아닌 배열을 반환합니다.

음... ㅎㅎ 무슨 소리지.......

그래서 아래에 있는 Discussion을 참고했어요!

map이랑 사용하는 방법은 같은데 nil에 해당하는 값은 없애주고 깔끔하게 반환해주나봐요!!

 

그러면 이제 아래 부분 코드를 해석해보면!

arr.count == 1 ? [-1] : arr.compactMap({ return $0 != min ? $0 : nil })

arr의 첫번째 인덱스 값과 변수 min 값이 같지 않으면 첫번째 값 삭제해주고 같으면 nil 을 반환해줘!

라는 뜻이겠죠?


정확성 비교

내가 푼 풀이

 

괜찮다고 생각한 풀이

오? 이번에는 제 코드가 조금 더 빠르네요!!! compactmap 명령어때문인가? 싶어서 공식문서를 살펴봤더니 아래와 같은 문구가 있었어요!

해석해보면

복잡성: O( m + n ), 여기서 n 은 이 시퀀스의 길이이고 m 은 결과의 길이입니다.

인데.. compactmap 내부에 적는 식의 길이와 결과의 길이가 큰 영향을 미치나봐요!! 좋은건 아닌듯합니다!..

 


오늘도 재미있었습니다!!

혹여나 틀린 부분이있거나 더 좋은 풀이가 있다면 댓글로 알려주세요!! :D 

감사합니당~~~