-
객체 문법 총 정리
객체 복사에 대한 이해
우선 복사하고싶은 객체를 spread연산자로 복사를 해 놓고 그 뒤에 추가, 수정하고 싶은 값을 적어준다.(이해 끝남.)
setObj((prev) => ({...prev, name : "변경할 값"}))
이런식으로!!
useReducer
- 역할 : state값을 변경하는데 사용되는 hook
- 왜 사용되나?
- useState를 사용해서 하면 당장 컴포넌트 안에서 밖에 쓸 수 없어.
- 만약 이 바꾸는 로직을 여러군데에서 사용하고 싶다면, useReduce를 사용하자 => 파일 분리로도 가능.
-
- 자바스크립트는 브라우져를 제어하는 언어인데,
BOM
이란 모델이 있기 때문이다.
- 자바스크립트는 브라우져를 제어하는 언어인데,
-
- 브라우져 전체를 의미하는 모델이라고 생각하면 편함.
- 즉, 브라우져 전체를 javascript가 접근하고 제어할 수 있게 모델로 바꾼 것.
- window, document, location, history, screen, navigator가 있다.
- dom도 BOM의 일종임 => 브라우져 전체는 BOM이고, BOM안에서 document띄우는 부분이 DOM임.
앞으로 readme매일매일 써야지!!
testCase를 포함해서 배열로 넣는 경우 있는데, 그럴경우 shift()로 앞에 있는 testCase count빼버린다.
str.indexOf("반환하고싶은 문자 => 문제같은 경우 각 알파벳의 index니까 반복하면서 모든 알파벳을 여기다가 넣어준다.")
str.repeat(반복 횟수) => "A".repeat(2) === "AA"
- 틀린 문제 :
❗️그룹 단어 체크❗️
- 문제 유형 :
❗️✨이전 문자들과 비교하는 문제✨❗️
- 문제 결과 :
testcase답들은 전부 맞았지만 틀렸습니다. 출력
- 문제 접근 : 반복문 내에서 가장 첫 번째 단어를 배열에 무조건 넣어두고, 조건을 검사했다.
- 조건1 : 이전 문자와 다른 경우(이럴 땐 문자열.indexOf가 -1이 나오면 통과!)
- 조건2 : 이전 문자와 같은 경우(무조건 통과)
- 통과를 한 단어는 반복문 내에서 continue를 써줬고,
- 불통을 한 단어는 그 즉시 반복문에서 나가고, wrong++을 해줬다.
- 답 : 옳은 것 만을 고르는 문제여서 전체 글자 수 - wrong을 해줬다. (wrong : 조건에 맞지 않은 단어의 수)
- 문제 유형 :
-
푼 문제 : 중복제거, 애너그램판별, 팰린드롬, 최대수익계산
-
어려웠던 문제 : 은근 중복제거가 어려웠는데, 대단한 아이디어를 하나 발견했다..
let uniqueNums = arr.filter((ele, idx) => { return arr.indexOf(ele) === idx; // ❗️와... 이건 진짜 생각 못 했다...❗️ });
- 보통 indexOf는 5가 2개 있어도 2번째 파라미터가 그대로면 무조건 앞에 원소 하나만을 return한다.
- 그래서 filter에서 5 5면
index는 0 1이 되지만 indexOf는 0 0 이 된다.
- 이후, index값과
indexOf return값이 같은 것
만 return 해줬더니 중복값이 제거됐다. - set객체만 알고있는 나에게 엄청난 무기가 됐다.
아직 한참 가야하구나.. 를 느꼈던 하루였다.
-
-
푼 문제 : 다항식 더하기, 수들의 합, 수 뒤집기 횟수
-
수들의 합(
백준(실버 5문제 => 쉬웠음)
) :서로 다른 자연수 n개의 합으로 숫자 s를 만든다 했을 때 n의 최댓값구하기!
최대한 많은 자연수를 활용하려면, 최대한 작은 서로 작은 자연수를 많이 써야해서 1 2 3 4 이런식으로 작은 수 부터 더해줌.
결국 200이면 190까지 밖에 안 더해진다. => 다음 수가 10보다 커서 200이 넘는데
어쩔 수 없이, 기존에 이미 더했던 10을 또 써야한다. => 그래서 개수는 반복문 i를 1부터 200을 막 념겼을 때 그 수 -1개.
-
수 뒤집기(
실버5
)- 11100011111011 => split('1')을 사용하면 0의 뭉치가 나온다!!
- 즉 1이 몇 개가 나오든 배열안에 1이 담기지 않는다.
1(뭉치)를 구분자로 배열로 만들어준다 ==> split활용가능한가 묻는 문제.
- 문제 이해는 10분만에 함. => 뭉치가 더 작은 걸 구하자.!
-
- JAVASCRIPT DOM TREE 공부함.
- sort로 각 요소들의 길이 순으로 정렬하기!
- 파라미터에 오는 a,b가 요소이고 return 되는 a b는 정렬방식! 여기서 a.length - b.length로!(길이 기준으로 정렬)
❗️문자열은 바꿀 수 없는데, 원하는 문자열로 바꾸려면 replace함수 사용한다!!!!!!!❗️
중복제거 => set객체, indexOf활용!
- 한 번만 등장한 글자!
- 횟수 나오는 거 s.length - s.split("해당문자").join('').length 해주면 돼!!!!!!!
- split으로 지정해 준 구분 문자가 나온 만 큼 문자열 길이에서 빠져!
- 영어가 싫다
- 내가 원하는 글자 찾으려면 그 글자를 제외한 글자를 전부 공백으로 바꾸고 공백기준 split하면 돼!
- isNaN() === false 숫자인지 아닌지 확인.
- 컨트롤 제트
- 대표적인 stack문제!
- 문자열 대체
- replaceAll : one을 여러 개 찾아서 1로 바꿔준다(1개만 있다면 replace역할을 한다)
-
정렬
- 백준 정렬에 있는 모든 문제 풀이 완료
- 생각보다
정렬 자체는 어렵지 않은데
, 역시나문제 해석이 중요하다.
-
문법공부
- 정렬중에 좌표 압축 문제를 hash로 풀어야 해서 set,map객체에 대해서 다시 한 번 학습을 하게 되었다.
-
시간복잡도
- 1억을 넘기면 안 되고, 10만도 이면 엔로그엔에 넣으면 충분히 풀 수 있다. (
즉, 정렬을 사용할 수 있다.
)
- 1억을 넘기면 안 되고, 10만도 이면 엔로그엔에 넣으면 충분히 풀 수 있다. (