알고리즘(with TS) 11

알고리즘 풀이 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가 나오나 ..

알고리즘 풀이 1)11-14번

11. 대문자 찾기 function solution11(str:string):number { let answer = 0; for(let char of str){ if (char === char.toUpperCase()) answer++; } return answer; } console.log(solution11('KoreaTimeGood')); 12. 대문자로 통일 function solution12(str:string):string{ return str.toUpperCase(); } console.log(solution12('ItisTimeToStudy')); *다른 로직 : 소문자 아스키코드-32 ->대문자 아스키코드 [ASCII code] 영어 대문자 : 65~90 영어 소문자 : 97~122 이 ..

알고리즘 풀이 1)6-10번

6. 홀수 들의 합과 가장 작은 홀수 구하기 function solution(a){ let oddArray = []; a.map(num => { if(num%2===1) oddArray.push(num); }) let answer_min = oddArray.sort((a,b)=>a-b)[0]; let answer_sum = oddArray.reduce((acc,cur)=>acc+cur) return `${answer_sum} ${answer_min}`; } arr=[12, 77, 38, 41, 53, 92, 85]; console.log(solution(arr)); // ----------강의풀이----------- //제일큰값 변수에 지정해놓고 비교하면서 작은 값으로 바꾸기 //이중 if문으로 누적값과..