10주 3일차 - 피그마 2/ 알고리즘
1. 배운 것
- 데일리 코딩 5번 풀이 - DP 메모이제이션 복습
- 데일리 코딩 4번 리팩토링 - new Set 사용
- new Set();
- new Map();
2. 내용 정리
데일리 코딩 5번 - DP 메모이제이션
let tiling = function (n, memo = [undefined, 1, 2]) {
// dp - memoization 사용
// 처음 1개의 타일은 1가지 경우, 2개의 타일은 2가지 경우
// 그 외 n개의 타일의 경우의 수 = n-1개의 경우의 수 + n - 2 개의 경우의 수.
// 즉 피보나치 수열 공식과 동일함.
// 풀이
// 1. 하위 문제의 답을 저장할 memo 배열 선언 -> 매개변수에서 바로
// 2. if n === 1 return 1 n === 2 return 2 -> 최초에 매개변수에서 memo 배열에 초기값으로 담아두어 연산 줄이기
// 3. if (memo[n] !== undefined) return memo[n];
// 4. let result = tiling(n - 1) + tiling(n - 2);
// 5. memo[n] = result;
// 6. return result;
if (memo[n] !== undefined) return memo[n]; // 메모이제이션 배열에 값이 있으면 리턴 -> 아래 재귀 호출에서 하위문제를 푼 결과를 재사용
let result = tiling(n - 1, memo) + tiling(n - 2, memo); // 두번째 인수로 메모이제이션 배열도 들어가야 함!!! 빼먹지 말기
memo[n] = result; // n개의 경우의 수를 메모이제이션 배열의 n번째 요소에 저장
return result;
};
데일리 코딩 4번 리팩토링 - new Set() 사용
const isSubsetOf = function (base, sample) {
// base와 sample을 하나의 배열로 만들어서 중복을 제거했을때
// 원래 base의 길이와 같으면 부분집합이고
// 원래 base의 길이와 다르면 부분집합이 아니다.
const everyElements = [...base, ...sample];
// 1. 중복 제거
const eraseOverlap = [...new Set(everyElements)];
// 2. 부분집합이 아니면 길이가 다름.
if (eraseOverlap.length !== base.length) return false;
return true;
};
Set
set 객체는 수학적 집합을 구현하기 위한 자료구조이다. 배열에서 중복된 요소를 제거하기 위해 흔히 사용된다.
new 연산자와 함께 Set 생성자 함수 호출로 set 객체를 생성한다. 호출시 인수는 이터러블(배열, 유사배열)만 가능.
let arr = [1, 23, 5, 10, 10, 14, 5];
let set1 = new Set(arr);
set1; // Set(5) {1, 23, 5, 10, 14}
let set2 = [...new Set(arr)]; // 생성된 set 객체를 디스트럭쳐링 할당
set2; // (5) [1, 23, 5, 10, 14]
Set 객체의 메서드
- add(val) : Set 컬렉션에 val값 추가
- delete(val) : Set 컬렉션 내에 존재하는 val값 제거
- has(val) : Set 컬렉션 내에 val의 존재유무 판단 true, false 반환.
- clear() : Set 컬렉션 내에 모든 요소들 제거
리액트 토이프로젝트
현재 경로에서 다시 프로젝트 폴더 생성 없이 바로 cra 하는 방법
npx create-react-app .
선.참.시 요약
비유로 이해하지 말고 이해가 안가는 내용은 코드로 이해하자.
배포한 내 서비스가 있으면 그래도 내가 이정도는 할 수 있구나 느끼고 자신감이 올라간다.
만들어 보는 경험이 중요.
커리 진행하면서 이 내용이 나중에 어떤식으로 기술면접 질문이 들어올지 염두하고 정리하며 수강하기.
왜 이 코드를 썼는지 설명할 수 있어야 함.
next.js 던 뭐던 기술 이전에 깃허브 사용법부터 제대로 숙지할 것.
말로 주절주절 내가 뭘 공부했다 x, 블로깅이던 프로젝트던 아웃풋으로 증명.
눈으로 코드치지 마라. 손에 익어야 내 공부다.
참고 자료
- [JavaScript] 37. Set 과 Map https://velog.io/@dolarge/Java-Script-Set-과-Map
- 자바스크립트 - new Set()을 이용해서 array 배열에서 내가 찾고자 하는 값이 있는지 빠르게 찾아보자! https://www.youtube.com/watch?v=PAdNyqU85zM
- [JS로 푸는 백준] 1764. 듣보잡 https://velog.io/@yoseoplee/JS로-푸는-백준-1764.-듣보잡
3. 리뷰
3.1 좋았던 점
- 조금 더 계획적이게 되었고 조금 더 실력이 늘긴 늘었다.
3.2 아쉬웠던 점
- 휴가 사용으로 학습하지 못한 ux/ui 방법론 부분과 피그마 숙달 미흡한 부분. 주말에 보충이 필요할 것 같다.
- 다음부터 절대로 자기전에 비타민음료 마시지 말자.
3.3 notes
https://www.youtube.com/watch?v=4QSGNVckngo
열두시쯤 누웠는데 세시까지 잠이 안와서 이러다간 내일 하루 날리겠다 싶어서 밤낮 돌리려고 그냥 오늘 하루는 밤 샜다. 밤샌 다음날 해 뜨고 나면 일주기 리듬상 낮쯤 되면 잠이 깬다는 말이 사실이었음을 몸으로 체감해서 신기했다. 물론 그전에 새벽과 아침은 정말 미친듯이 졸려서 쪽잠을 자기는 잤다.
뭐 밤새서 미친듯이 열공했다는 합격수기마냥 하루가 전개되었다면 좋았겠지만 실제론 좀비를 책상에 앉혀놓고 책을 읽히면 이런 느낌일까 싶은 하루였다.
내가 왜 이 공부를 시작했는지 초심으로 돌아가 생각해보고, 내가 어떤 개발자가 되고싶었는지 다시금 떠올리게 되는 날이다. 저녁을 먹었더니 이제 깨어있는데 한계가 온 것 같다. 자야겠다.
내년엔 다시 달릴 수 있겠지.
'기록 > 코드스테이츠 프론트엔드' 카테고리의 다른 글
10주 5일차 - react custom component 과제 (0) | 2022.07.02 |
---|---|
10주 4일차 - [React] Custom Component (0) | 2022.07.02 |
10주 1일차 - 휴가 사용(알고리즘 보충학습) (0) | 2022.06.27 |
9주 5일차 - JSON (0) | 2022.06.25 |
9주 4일차 - 재귀, dp (0) | 2022.06.23 |