프로그래머스 고득점 kit 문제 중 `완주하지 못한 선수` 를 풀기 위해 공부하다 Map이라는 자료구조를 찾게 되었습니다.
처음에는 문제를 풀기 위함으로 sort & loop 방식을 이용하여 풀었지만, 문제유형은 `해시` 였기에 그에 타당한 방법으로 문제를 풀고 싶었습니다.
그로 인해 Map 이란 자료구조를 선택 하였고, `완주하지 못한 선수` 를 풀었지만, Map 이라는 자료 구조가 다른 형태(배열, 객체) 및 sort&loop 형태로 문제를 해결 했을때에 비해 효율성 테스트를 비교 해보고 싶었습니다
Map | 객체 | 배열 | sort & loop |
효율성 테스트
통과 (19.99ms, 45.6MB)
통과 (35.49ms, 56.7MB)
통과 (36.62ms, 60.1MB)
통과 (41.05ms, 59.5MB)
통과 (35.01ms, 59.6MB)
|
효율성 테스트
통과 (25.24ms, 48.1MB)
통과 (38.33ms, 52.9MB)
통과 (45.24ms, 56.9MB)
통과 (70.64ms, 65.5MB)
통과 (61.63ms, 65.8MB)
|
효율성 테스트
통과 (33.37ms, 48.1MB)
통과 (46.15ms, 52.8MB)
통과 (48.48ms, 56.2MB)
통과 (75.87ms, 66.2MB)
통과 (73.47ms, 66.6MB)
|
효율성 테스트
통과 (46.19ms, 41MB)
통과 (77.15ms, 48.1MB)
통과 (94.38ms, 52.5MB)
통과 (95.84ms, 54.6MB)
통과 (103.65ms, 53.4MB)
|
작성 코드 : github/AbyulStudy
|
이를 비교하기 위해 최대한 비슷한 방식으로 코드를 작성 했습니다.
효율성으로는 `Map > 객체 > 배열 > sort` 순으로 확실히 Map 이란 자료 구조가 속도가 빨랐습니다.
추가 적으로 `완주하지 못한 선수` 다른 사람 풀이 중 정규 표현식을 이용하여 문제를 해결한 사람이 있었습니다.
var solution=(_,$)=>_.find(_=>!$[_]--,$.map(_=>$[_]=($[_]|0)+1))
효율성 테스트
통과 (22.04ms, 47.3MB)
통과 (30.04ms, 51.4MB)
통과 (35.00ms, 55.8MB)
통과 (41.40ms, 63.7MB)
통과 (43.50ms, 63.1MB)
|
효율성 및 가독성 면에서는 상당히 보기 힘든 코드이지만, 엄청난 숏코딩을 보여준 임펙트가 큰 코드였습니다.
참고 사이트
https://ko.javascript.info/map-set
맵과 셋
ko.javascript.info