본문 바로가기

Algorithm & World Class

(39)
Update 1(좋은 코드의 작성을 위해) sumOfArraysInArray update 1 function sumOfArraysInArray(arr) { let newArr = []; arr.filter((el) => { for(let i of el) { if(typeof i === 'number') { newArr.push(i); } } }) return newArr.reduce((acc, cur) => { return acc = acc + cur; }, 0) } 처음과 비교하면 확실히 filter와 reduce와 같은 고차함수의 사용법에 익숙해졌다. 고차함수의 인자는 함수이다. 인자로 넣어준 함수의 기준에 맞는 결과값이 반환되는 구조이다. 위의 코드가 레퍼런스보다 좋은 이유는 filter 함수 안에서 인자로 쓰이는 배열의 요소에서 number 타입만 반환해서 새로운 배열 n..
(좋은 코드의 작성을 위해) studentReports studentReports 문제 학생의 정보가 담긴 객체를 요소로 갖는 배열을 입력받아 아래 조건에 맞게 변형된 배열을 리턴해야 합니다. 남학생들의 정보는 리턴하는 배열에서 제외합니다. 'grades' 속성값은 평균값(number 타입)으로 바꿉니다. 입력 인자 1 : students 객체를 요소로 갖는 배열 arr[i]는 'name', 'gender' 등의 속성을 갖는 객체 'grades' 속성은 number 타입을 요소로 갖는 배열 'grades' 속성이 빈 배열인 경우는 없다고 가정합니다. 출력 반복문(for, while) 사용은 금지됩니다. 배열을 리턴해야 합니다. 배열로 되어 있는 학생들의 성적을 number 타입의 평균값으로 변형해야 합니다. 주의 사항 'female'는 여학생, 'male'는..
(좋은 코드의 작성을 위해) mostFrequentCharacter(개인적인 최상 난이도) mostFrequentCharacter 문제 문자열을 입력받아 가장 많이 반복되는 문자(letter)를 리턴해야 합니다. 입력 인자 1 : str string 타입의 공백이 있는 문장 출력 string 타입을 리턴해야 합니다. 주의 사항 띄어쓰기는 제외합니다. 가장 많이 반복되는 문자가 다수일 경우, 가장 먼저 해당 횟수에 도달한 문자를 리턴해야 합니다. 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다. mine : 거의 하드코딩 수준이다. OTL function mostFrequentCharacter(str) { let newStr = str.replace(/(\s*)/g,'').split(''); //replace에서 정규표현식을 통해 공백 제거 let newObj = {}; let maxV..
고차함수 reduce의 특이한 점 고차함수 reduce는 특이하다. reduce 인자가 2개가 있는데 함수와 배열이 들어온다. 그런데 그 인자 2개에 함수와 배열이 아닌 acc와 current value가 들어오는 경우가 있다. 사설이 길다. 아래 그림을 보자 콘솔로 el2를 찍었을 때 배열의 모든 요소가 한번씩 모두 반환된 것을 확인할 수 있다. 그렇다면 el1은 어떤 녀석인가? el1이 ''(빈배열)임을 알 수 있다. reduce로 arr의 요소의 개수만큼 순회하니 최초값 ''로 찍히고 누산값에 아무런 작용이 없어 그이후 undefined이 2번이나 반환되었다. 기억하자. reduce 함수의 2개의 인자를 요소로 생각하고 그것들을 가지고 대소 비교도 가능하다. function getLongestElement(arr) { return ..
(좋은 코드의 작성을 위해) classicMovies classicMovies 문제 영화 정보가 담긴 객체를 요소로 갖는 배열과 연도를 입력받아 해당 연도 이전의 영화를 요소로 갖는 배열을 리턴해야 합니다. 입력 인자 1 : arr 객체를 요소로 갖는 배열 arr[i]는 'title', 'year' 등의 속성을 갖는 객체 'year' 속성은 number 타입 (1 이상의 정수) 인자 2 : year number 타입의 연도 (1 이상의 정수) 출력 string 타입을 요소로 갖는 배열을 리턴해야 합니다. 각 요소는 영화 제목 by 영화 감독의 형태를 가져야 합니다. 주의 사항 반복문(for, while) 사용은 금지됩니다. mine function classicMovies(arr, year) { let newArray = []; const isOlderTh..
(고차함수를 이해하기 위해) compose2 compose2 문제 두 개의 함수를 입력받아 두 함수가 결합된 새로운 함수를 리턴해야 합니다. 입력 인자 1 : func1 number 타입을 입력받아 임의의 타입을 리턴하는 함수 인자 2 : func2 number 타입을 입력받아 number 타입을 리턴하는 함수 출력 함수를 리턴해야 합니다. 리턴되는 함수는 정수를 입력받아 func2, func1의 순으로 적용합니다. 주의 사항 입력받은 함수들이 어떤 일을 하는지는 중요하지 않습니다. 입출력 예시 function square(num) { return num * num; } function add5(num) { return num + 5; } function isOdd(num) { return num % 2 !== 0; } let output = co..
(좋은 코드 작성을 위해) firstReverse firstReverse 문제 문자열을 입력받아 순서가 뒤집힌 문자열을 리턴해야 합니다. 입력 인자 1 : str string 타입의 문자열 출력 string 타입을 리턴해야 합니다. mine function firstReverse(str) { let strArray = str.split(''); let newStr = ''; for(i = strArray.length - 1; i >= 0; i = i - 1) { newStr = newStr + strArray[i]; } return newStr; } reference function firstReverse(str) { return str.split('').reverse().join(''); } application point 1. 최악의 코드를 작성한 ..
(좋은 코드 작성을 위해) computeWhenDouble computeWhenDouble 문제 연이율을 입력받아 원금이 2배 이상이 될 때까지 걸리는 시간(년)을 리턴해야 합니다. 입력 인자 1 : interestRate number 타입의 연이율 (%) 출력 number 타입을 리턴해야 합니다. 입출력 예시 let output = computeWhenDouble(7); console.log(output); // --> 11 mine function computeWhenDouble(interestRate) { let myPrincipal = 1; let yearsForSaving; for(yearsForSaving = 0; myPrincipal < 2; yearsForSaving++) { myPrincipal = myPrincipal * (1 + interes..