일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- postcss
- KDT 프로그래머스 데브코스 프론트엔드
- 프로그래머스 데브코스 프론트엔드
- SCSS forward
- 쌓임맥락
- netlify redirect
- git 같은계정 다른 컴퓨터
- 리스트 렌더링
- KDT 프로그래머스
- 폼 입력 바인딩
- vue mixin
- nextjs사용법
- SCSS import
- 다른컴퓨터에서 git사용
- vuex map
- SCSS use
- Vue
- intersection opserver
- 리액트
- vue 이벤트 수신
- vue 지역 컴포넌트
- 고양이 사진 검색기
- 이벤트 수식어
- 프로그래머스 K_Digital Training
- flex
- 프로그래머스 데브코스
- Spacer
- react next
- 프로그래머스 프론트엔드 데브코스
- SCSS extend
- Today
- Total
혼자 적어보는 노트
프로그래머스 데브코스 TIL - Day 4 본문
✅ 학습 목차
- [Day 4] JavaScript 주요 문법 (4)
✅ 새롭게 학습한 부분
- Queue
- 해시테이블
Queue
queue 를 Array형식과 연결리스트 형식으로 구현하는 방법을
알게되었다.
🔥queue문제에서 shift를 쓰면 안된다고?
지금까지 queue관련 문제가 나왔을 때 shift로 해결을 했었는데
shift()를 사용하면 O(n)의 시간복잡도를 가지기 때문에
array형식과 연결리스트 형식으로 구현하는 것이 좋다고 한다.
+ 제한사항이 작을 경우 shift를 사용해도 된다.
연결리스트를 사용한 큐 방식이 아직은 조금 어색해서
버벅대면서 했다😢😢
해시테이블
키와 값을 받아 해싱하여 나온 index에 값을 저장하는 선형 자료구조
삽입은 O(1)이며 키를 알고 있다면 삭제, 탐색도 O(1)으로 수행한다.
✍ 실습
처음작성한 코드 (실패)
function solution(genres, plays) {
let answer = [];
let albums = {};
for (let i = 0; i < plays.length; i++) {
if (!albums[genres[i]]) {
albums[genres[i]] = [];
albums[genres[i]]["max"] = 0;
}
albums[genres[i]].push([plays[i], i]);
albums[genres[i]].max += plays[i];
}
let keys = Object.keys(albums).sort((a, b) => albums[b].max - albums[a].max); // 가장 많이 재생된 장르 알아내기
for (let i = 0; i < 2; i++) {
albums[keys[i]].sort((a, b) => b[0] - a[0]); // 앨범의 장르 재생시간 정렬
if (albums[keys[i]].length <= 1) {
answer.push(albums[keys[i]][0][1]);
} else {
answer.push(albums[keys[i]][0][1]);
answer.push(albums[keys[i]][1][1]);
}
}
return answer;
}
처음에 이렇게 어디 내놓기도 창피한 이상한 코드를 작성했었고..🙄
예상했듯 채점란에서 심각한 점수가 나왔다..
albumList.sort((a, b) => {
if (a.genre !== b.genre) return albumsTime[b.genre] - albumsTime[a.genre]; // 총 재생 시간 순서대로 정렬
if (a.time !== b.time) return b.time - a.time; // 각 재생 시간 순서대로 정렬
});
코드를 수정해보는 와중에 정렬을 몇번 씩 하면서 정렬에 대해 조금은 감이 잡혔다.
물론 해설코드에서는 이렇게 복잡하게 정렬을 하진 않았지만 정렬을 디테일하게 할 수 있고
정렬에 대한 동작 방식에 대해 알게 되었다.
이후 코드 해설을 보며 아직 갈길이 멀다는 것을 깨달았다😭
메서드들을 연결해서 푸는게 아직 익숙하지 않아서 하나씩 익히기가 어려웠지만 재밌었다.
{'key' => {...}, 'key2' => {...}} 형식의 map에 [...map]을 사용하면
['key', {...}] ['key', {...}]으로 형식이 바뀐다는 것을 알게되었다. 👍
Map함수와 flatMap을 사용하면서 배열로 변경하는 등 다양하게 나왔는데
실습을 더 해봐야겠다고 느꼈다!
✍ 느낀점
자료구조와 알고리즘을 이용해서 문제를 푸는것이 익숙하지 않아서
실습하는 과정이 꽤나 어려웠다..
이해가 잘 안되어서 이해해보려고 코드를 계속 읽어보고 흐름을 따라가보기도 하고
다 지우고 흐름만 기억해서 다시 써보기도 하고 여러차례 해보았다..
지금은 이해했지만 내일의 나는 어떨지 모르겠다 😂
반복적으로 다양한 문제를 직접 풀어봐야 머리와 손에 익을 것 같다!
'스터디' 카테고리의 다른 글
프로그래머스 데브코스 TIL - 1주차 보충 (0) | 2022.03.26 |
---|---|
프로그래머스 데브코스 TIL - Day 5 (0) | 2022.03.25 |
프로그래머스 데브코스 TIL - Day 3 (0) | 2022.03.23 |
프로그래머스 데브코스 TIL - Day 2 (0) | 2022.03.22 |
프로그래머스 데브코스 TIL - Day 1 (0) | 2022.03.21 |