-
[CodeKata] 프로그래머스 : 2.25(목), 구명보트Algorithm 2021. 2. 25. 12:54반응형
🥋 Ooooth!! (Level 2)
🧮 풀이
function solution(people, limit) { let count = 0; let pairPeople = people.sort((a,b) => b-a).filter(person => person <= limit - people[people.length-1]) count += people.length - pairPeople.length while (pairPeople.length !== 0) { const now = pairPeople.shift(); if (now + pairPeople[pairPeople.length-1] <= limit) { pairPeople.pop(); } count++ } return count; }
- count는 구명보트의 수(정답)가 될 것이다.
- pairPeople은 people 배열을 내림차순 배열하고, (limit - 최소값) 보다 작은 값만 필터링했다. 이외는, 혼자 타야하는 값이므로.
- 그렇기 때문에, people과 pairPeople 차이는 혼자타는 보트의 개수인 것이다.
- 다음으로, pairPeople이 빌 때까지 while 반복문을 돌린다. 항상 맨 앞에 최대값을 shift() 한다.
- 만약, 맨 뒤의 값과의 합이 limit보다 작을 경우, 맨 뒤의 값도 pop() 해준다.
- 이 과정이 끝나면, count에 1을 더한다. 이는 둘이 타는 보트의 개수인 것이다.
🖇 리뷰
function solution(people, limit) { let count = 0; let pairPeople = people.sort((a,b) => b-a).filter(person => person <= limit - people[people.length-1]) count += people.length - pairPeople.length while (pairPeople.length !== 0) { // 이전 풀이 const a = pairPeople.pop(); const b = pairPeople.findIndex(person => person <= limit - a); if (b !== -1) { pairPeople.splice(b,1); } count++ } return count; }
처음에는, 뒤에서 최소값을 빼고 앞에서부터 findIndex 조건을 통해, 만족하는 요소를 splice하는 로직이었다.
이 풀이는, 정확성 테스트는 통과했지만, 효율성 테스트는 1번에서 실패가 나왔다. (다들, 여기가 마의 구간인듯..)
아마, 최종 풀이는 배열 끝요소만 확인한 뒤 빼는 거라면, 이 풀이는 배열 전체적으로 findIndex하고 또 이를 변수에 할당하는 차이 때문인듯하다.
반응형'Algorithm' 카테고리의 다른 글
[CodeKata] 데일리 프로그래머스 : 2.27(토), 순위 검색 (0) 2021.02.27 [CodeKata] 프로그래머스 : 2.26(금), 타겟 넘버, 카펫 (0) 2021.02.26 [CodeKata] 프로그래머스 : 2.24(수), 위장 (0) 2021.02.24 [CodeKata] 프로그래머스: 2.23(화), 메뉴 리뉴얼 (0) 2021.02.23 [CodeKata] 프로그래머스: 2.22(월), 멀쩡한 사각형 (0) 2021.02.22