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]]​