일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 모던 자바스크립트 딥다이브
- 인프런 자바스크립트 알고리즘 문제풀이
- TypeScript 문법 소개
- 프로그래머스 K_Digital Training
- 모던 자바스크립트 Deep Dive TIL
- 모던 자바스크립트 Deep Dive
- 백준 js
- Vue3
- 프로그래머스 데브코스
- Vue3 Router
- 개발자 특강
- react 프로젝트 리팩토링
- KDT 프로그래머스 데브코스 프론트엔드
- 프로그래머스 K_Digital Training 프론트엔드
- KDT 프로그래머스
- 모던 자바스크립트 TIL
- useEffect return
- Frontend Roadmap
- 프로그래머스 데브코스 프론트엔드 TIL
- 머쓱이
- 백준 node.js
- K_Digital Training
- 투포인터알고리즘 js
- 리팩토링 회고
- 프로그래머스 데브코스 프론트엔드
- 우테캠 회고록
- 모던 javascript Deep Dive
- useRef 지역 변수
- react customHook 예시
- frontend roadmap study
- Today
- Total
프론트엔드 개발자의 기록 공간
[프로그래머스 JavaScript] 완주하지 못한 선수 본문
프로그래머스 Level1 완주하지 못한 선수 문제
문제 풀이 : 참가자 명단(participant)과 완주자 명단(completion)을 비교하여 완주하지 못한 선수가
누구인지만 찾으면 되는 문제이다.
* 참가자중 동명이인이 있을 수 있다는 조건이 약간 까다로웠다.
처음에는 참가자 명단 for문을 돌면서 indexOf나 includes로 완주자 포함여부를 찾은뒤,
해결하는 로직으로 작성하였다. 제출을 하니 효율성 검사에서 시간초과 문제가 발생하였다.
즉, 이 문제는 시간복잡도도 고려해줘야하는 문제이다. for문안에 indexOf를 사용했기에 O(n^2)의 복잡도를 가진다.
해결하기 위해서는 O(nlogN)이나 O(n)으로 해결해주어야한다.
* 다른 사람의 풀이를 보면 sort로 이용하여 푼 방법도있지만, 이 문제의 유형을 다루기 위해 정석적인 풀이로 풀었다.
그래서 다시 문제를 파악했는데, 해시 유형인것을 파악할수 있었다.
해시란 데이터를 다루는 기법 중에 하나로 검색과 저장이 아주 빠르게 진행되는 자료구조이다.
검색시 key와 value의 쌍으로 검색되기 때문에 O(1)에 가깝다.
그러면 3단계로 나눠서 해당 문제를 해결해주면된다.
1. 참가자 명단(participant)을 순회하면서 key: 선수이름 value: +1로 Map을 이용해 key, value쌍으로 만들어준다.
2. 완주자 명단(completion)을 순회하면서 Map함수에 key(선수이름)이 있을시, value: -1을 해준다.
3. 2번의 과정을 마치고 나면 완주를 한 선수의 value값은 0이 될것이고, 그외에는 1이상일것이다.
그래서 value값이 1이상일때 해당 선수의 이름을 answer값에 넣어주고 리턴해준다.
'알고리즘_JS > 프로그래머스_Level1' 카테고리의 다른 글
[프로그래머스 JavaScript] 모의고사 (0) | 2021.05.22 |
---|---|
[프로그래머스 JavaScript] K번째수 (0) | 2021.05.22 |
[프로그래머스 JavaScript] 신규 아이디 추천 (0) | 2021.05.17 |
[프로그래머스 JavaScript] 소수 만들기 (0) | 2021.05.08 |
[프로그래머스 JavaScript] 내적 (0) | 2021.05.08 |