공부/알고리즘&자료구조

항해99 문제26번풀이 (제일 작은수 제거하기,프로그래머스)

youngble 2021. 11. 10. 23:27

https://programmers.co.kr/learn/courses/30/lessons/12935

 

코딩테스트 연습 - 제일 작은 수 제거하기

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1

programmers.co.kr

참고하고 푼것:

접근법

숫자가 들어있는 배열이 들어갔을때 최소값을 찾는것과 어떻게하면 그 최소값을 배열에서 뺄수있을까 먼저 생각하였다.

이때 그전까지 써보지 않았던 reduce 메서드를 사용하여 입력한 배열의 인덱스 값들을 차례대로 검사하며  min 이라는 곳에 조건에 따른 값을 넣을려고 했다. 이떄 최소값을 넣어야하므로 비교값이 참이라면 큰수를 넣으면 안되니 acc(예전값, 누적값)을 넣어주고, 비교값이 false 가나오면 cur 이 더 작은것이므로 cur(최근값)을 min에 넣어주려고했다.

 

 

코드 해석

2줄. 문제에서 제한을 두었던게 배열의 크기가 1이거나 []일때는 [-1]을 리턴하라고 요구했기때문에, 만약 입력값이 이 조건에 만족한다면           [-1]만 return 하고 함수를 종료한다.

3줄. 최소값을 담을 변수 min을 만들어줌.

4줄. reduce를 이용하여 acc(예전값,누적값) 와 cur(현재값)을 비교하는 function을 arrow 함수로 줄여 썼다. 또한 그 안에 삼한 연산자로 조건문을 썼는데 min 변수에 cur과 acc을 비교했을때 참이면 acc을, 거짓이면 cur을 min에 넣어 최소값을 구했다.

5줄. 최소값을 구했기때문에 최소값을 제외한 배열을 return 해야하는데 이때 filter를 하여 ()안에 해당하는 조건을 만족하는 값들만 arr 배열에 남기고 충족하지않은건 지워준다. element 같은경우 arr.filter이므로 arr의 인덱스값들을 순서대로 filter 해주는것이다. => 를 써 아까 넣어준 min 과 arr의 배열안의 값들을 비교해서 만약 같지 않다면 그대로 두고, 같다면 제거하는것이다.