카테고리 없음

[TIL] 프로그래머스 `완주하지 못한 선수`

dev-byul 2022. 2. 6. 00:13

프로그래머스 고득점 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

https://erim1005.tistory.com/entry/Javascript-%EC%97%90%EC%84%9C-Object%EB%A5%BC-%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%B2%98%EB%9F%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EB%A7%88%EC%84%B8%EC%9A%94