TIL ( Today I Learned )
0630_TIL
outwater
2021. 7. 1. 00:54
🎄오늘 한 일
✔️ 1. 그리디 알고리즘 학습
- 이것이 코딩테스트다(나동빈)의 챕터1 그리디파트 학습
✔️ 2. 그리디 관련 4문제 풀이
- 거스름돈
- 큰수의 법칙
- 숫자카드게임
- 1이 될 때 까지
✔️ 3. 알고리즘스터디 4문제 풀이 (3문제 성공)
- [카카오1차] 캐시 (큐) ⭐(체감난이도 lv.1)
- [카카오 1차] 프렌즈4 블록 보드구현 ⭐⭐⭐(체감난이도 lv.3+) - fail
- [카카오3차] 방금그곡 ⭐⭐⭐ (체감난이도 lv.3)
- 기지국설치 ⭐⭐(체감난이도 lv.2)
🎄기억할 것
1. 일반 배열에서 중복 값(배열) 제거하기
- indexOf( ) 는 일치하는 가장 첫 번째 idx만을 가져온다는 것을 이용
let arr = ['a', 'b', 'c', 'c', 'b'] arr.filter((el,idx) => arr.indexOf(el) === index) // ['a', 'b', 'c']
- uniq 배열 생성하여, 비교하며 담기
let arr = ['a', 'b', 'c', 'c', 'b']; let uniq = []; for(let i = 0; i < arr.length; i++){ if(!uniq.includes(arr[i])) uniq.push(arr[i]) } // ['a', 'b', 'c']
- 중복 값의 개수 구하기
let arr = ['a', 'b', 'c', 'c', 'b']; arr.reduce((acc, cur) =>{ acc[cur] = (acc[cur] || 0) + 1 },{}); // {a:1, b: 2, c:2}
2. 중첩 배열에서 중복 값(배열) 제거하기
- 중첩배열에서는 배열이 메모리주소를 참조하기 때문에 includes, indexOf 등 사용할 수 없다.
따라서 객체를 통해 해시테이블과 유사한 방식으로 중복여부를 판단한다.
let arr = [[ 0, 1 ], [ 1, 1 ],[ 0, 2 ], [ 1, 2 ], [ 0, 2 ],[ 1, 2 ],[ 0, 3 ], [ 1, 3 ]] let hash = {}; for(const el of arr){ hash[el] = (hash[el] || 0 ) + 1 } //hash = {0,1: 1, 0,2: 2, 0,3: 1, 1,1: 1, 1,2: 2, 1,3: 1}
- 배열 형태로 구하고자 한다면
let keys = Object.keys(hash) keys.map( el => [el.split(',').map(el2 => Number(el2))] ) // [[0,1], [0,2], [0,3], [1,1], [1,2] ,[1,3]]