전체 글 80

정규식으로 로그인 유효성 체크하기

이메일 검사 1. @앞에 영어 대소문자가 필수로 들어가야함 2. @앞에 대소문자+숫자 또는 대소문자+특수문자(-_.) 또는 대소문자+숫자+특수문자(-_.) 가능함 (순서상관X) 3. @뒤에는 영어 소문자가 필수로 들어가야함 4. @뒤에는 소문자+ 숫자 또는 소문자+특수문자(-_.) 소문자+숫자+특수문자(-_.) 가능함 (순서상관X) 5. 마지막은 .com으로 끝나야함 - 특수문자 앞에는 \ 붙여줘야 함 - * : 0개~여러개 (있거나 없거나) / + : 1개~여러개 (무조건 한번은 존재) / ? : 0개 또는 1개 (반복 불가) -> 방법1) (?:[0-9\-\_\.]*[A-Za-z]+[0-9\-\_\.]*)+@(?:[0-9\-\_\.]*[a-z]+[0-9\-\_\.]*)+(?:\.com)$ * : 0개..

카테고리 없음 2023.03.05

yarn berry3 으로 React + typscript 프로젝트 세팅하기

npm? yarn? npm과 yarn모두 node환경에서 자바스크립트 패키지를 관리해주는 도구이다. yarn은 기존 npm의 단점이였던 속도, 안정성, 보안성 등을 보완하여 facebook에서 출시했다. 의존성파일을 순차적으로 설치하던 npm과 달리 yarn은 병렬적 설치를 진행해서 설치와 빌드 속도를 높였고 yarn.lock 을 통해 의존성트리를 고정시켰다. 현재는 npm도 몇차례의 업데이트를 통해 이러한 단점들을 보완한 상태이다. 하지만 yarn도 업데이트를 하며 이전보다 더 개선된 기능들이 추가되었다. pnp 전략을 도입하면서 node_modules 없이 의존성 관리를 zip파일로 할 수 있게 되었고, 의존성을 버전관리에도 포함시킬 수 있게 되면서 저장소를 복제 해온 뒤에 의존성을 설치할 필요가 없..

카테고리 없음 2023.03.02

알고리즘 풀이 5)6-8 (해쉬)

그동안 알고는 있었으나 생소해서 사용하지 못한 Map 자료형을 활용해서 문제를 풀게 되었다. 이번 기회에 Map에 요소를 추가하고 지우고 다양한 형태로 변환해서 사용할 수 있게 됐다. Section5_6번: 학급 회장(해쉬) function solution5_6(N: number, str:string):string { const voteArr = str.split("") let map = new Map(); voteArr.forEach(char => { if(!map.has(char)) map.set(char, 1); else map.set(char, map.get(char) + 1); }) return [...map.entries()].reduce((a,b)=> a[1]>b[1] ? a : b)[0];..

알고리즘 풀이 5)1-5 (투포인터 알고리즘, 슬라이드윈도우)

투 포인터라는 개념을 전혀 모르고 기존에 알고있는 방법으로만 풀었는데 강의를 들어보면서 시작복잡도 개선을 위해 투 포인터 알고리즘으로 문제를 풀이하는 방법을 배웠다. Section5_1번: 두 배열 합치기 (배열의 합집합) //--------------투포인터 풀이----------------- function solution5_1_1(arr1: number[], arr2: number[]): number[] { let answer: number[] = []; let len1 = arr1.length; let len2 = arr2.length; let p1 = 0; let p2 = 0; while (p1 < len1 && p2 < len2){ // 둘중 하나가 거짓이면 전체가 거짓 if(arr1[p1] ..

알고리즘 풀이 4)4-5 (완전탐색-블루투포스) & TS(unknown타입, Set타입)

Section4_4번: 졸업선물 function solution4_4(M: number, arr: Array): any { let sortedWish: Array = []; //쿠폰+배송비 적용시 낮은 가격순 sortedWish = arr.sort((a, b) => ((a[0]/2+a[1]) - (b[0]/2+b[1]))); let total = 0; let count:number = 1; // 낮은 가격부터 추가하면서 마지막 상품에 쿠폰을 적용시켜보고 예산보다 적으면 다시 빼기 sortedWish.push([100000, 100000]) for (let i=0; i b - a); return sortedSums[K-1] } console.log(solution4_5(10, 3, [13, 15, 34, ..

알고리즘 풀이 4)1-3 (완전탐색-블루투포스)

이날따라 문제가 버거워서 풀기가 너무 힘들었다ㅜ0ㅜ Section4_1번: 자리수의 합 ------------강의 풀이1 (숫자형-자리수 나눠서 분리)--------------- function solution4_1(arr: number[]) { let answer=0; let max=Number.MIN_SAFE_INTEGER; for(let num of arr){ let sum=0, tmp=num; //원본 숫자는 변형되지 않도록 tmp에 깊은 복사 while(tmp){ //tmp가 0이 아닌 수이면 ture, 0이면 false sum+=(tmp%10); tmp=Math.floor(tmp/10); } if(sum>max){ max=sum; //sum에 들어간건 복사해서 변형한 tmp answer=num..

알고리즘 풀이 3)4-5

Section3_4번: 가장 짧은 문자거리 -------강의 풀이------ 목표 문자와의 양쪽 거리 확인하는 법 :앞에서부터 for문 돌면서 왼쪽과의 거리 체크 뒤에서부터 for문 돌면서 오른쪽과의 거리 체크. 둘 중 작은 값 가져오기. *주의!!) 거리 체크용 변수의 초기값은=큰값(ex.문자열 길이보다 큰 1000)으로 설정해야한다. 맨 앞 문자 거리가 잘못 계산될 수 있음! ( ex. abcba 에서 c체크) t e a c h e r m o d e 0 0 1 2 3 0 1 2 3 4 0 -> 1 0 3 2 1 0 4 3 2 1 0

알고리즘 풀이 2)6-7, 3)1-3 & TS(isNaN 사용시 주의할 부분)

Section2_6번: 격자판 최대합 function solution2_6(num: number, arr: number[][]): number { const rowSums: number[] = []; const columnSums: number[] = []; let diaSumFromLeft = 0; let diaSumFromRight = 0; // arr[0][0]+arr[0][1] for (let i = 0; i < num; i++) { let lineSum = 0; for (let j = 0; j < num; j++) { lineSum += arr[i][j]; } rowSums.push(lineSum); } // arr[0][0]+arr[1][0] for (let i = 0; i < num; i++..

알고리즘 풀이 2)1-5

2_1. 큰수 출력하기 function solution2_1(arr: number[]): string { let answer = [arr[0]]; for (let i = 1; i < arr.length; i++) { if (arr[i - 1] < arr[i]) answer.push(arr[i]); } return answer.join(" "); } console.log(solution2_1([7, 3, 9, 5, 6, 12])); 0번 째 경우를 따로 명시해주기 번거로워서 answer의 초기값에 처음부터 넣어주었다. + filter를 쓰는 방법도 있음 2_2. 보이는 학생 //이렇게 하면 틀림! function solution2_2(arr: number[]): number { let answer = 0;..

알고리즘 풀이 1)15-17번

15. 가운데 문자 출력 function solution15(str:string):string { const minIndex = Math.floor(str.length/2) return str.length%2 === 0 ? str.slice(minIndex-1, minIndex+1) : str.slice(minIndex, minIndex+1) } console.log(solution15('study')); + '/' 연산자가 몫을 구하는 연산자인 줄 알았는데 강의를 들으면서 그냥 나눗셈 연산자였다는걸 깨달았다. JS에서는 몫을 구하는 연산자가 없다! Math.floor()를 쓰던지 나눗셈 결과에서 나머지를 빼던지 해야한다. + 삼항연산자 앞에 return을 써주는걸 잊어서 왜 undefined가 나오나 ..