전체 글

[풀이] function solution(x) { const newArr = x .toString() .split("") .map((arg) => Number(arg)); let sum = 0; for (let i = 0; i < newArr.length; i++) { sum += newArr[i]; } return x % sum === 0 ? true : false; } 1. 새로운 배열을 담을 변수를 만들고 x를 문자열로 변환해준다. (배열에 담기위해서..) 2. 그리고 문자열을 쪼개 배열로 만들고, map 함수를 이용해 숫자로 바꿔준다. 그러면 [1, 0]이 되어 있을 것. 3. 합한 수를 담을 변수를 만든다 (sum) 4. for문을 새로운 배열의 길이만큼 순회시키고, sum 변수에 새로운 배열의..
[풀이] function solution(n) { const arr = n.toString().split("").sort(); const result = parseInt(arr.reverse().join("")); return result; } 1. 배열을 담을 변수를 만들고 n을 문자열로 변환후 쪼개서 잘라 배열에 담고 오름차순으로 정리해준다. 2. 그 배열을 뒤집고(내림차순으로 만들기위해) 붙여준 후 숫자로 바꿔준 결과값을 리턴한다. [코드리뷰] function solution(n) { const arr = n.toString().split("").sort((a, b) => b - a).join("") return parseInt(arr); } 1. sort()를 사용할 때 의도치 않은 결과가 나오는..
[풀이] function solution(n) { const str = n.toString(); //const mapNum = (arg) => Number(arg); const newArr = str.split("").map((arg) => parseInt(arg)); return newArr.reverse(); } 1. n을 문자열로 만들어준다. "12345" 2. 새 배열에 그 문자열을 쪼개서 담아주고 map 함수를 이용해 숫자로 바꿔준다. [1, 2, 3, 4, 5] 3. 새 배열을 뒤집어 리턴한다. [코드 리뷰] function solution(n) { return n.toString().split("").map(Number).reverse(); } 별다른 변수를 설정하지 않고 한줄로도 코드 작성..
[풀이] function solution(n) { for (let i = 1; i
[풀이] function solution1(sizes) { const newArr = sizes.map(([w, h]) => (w > h ? [w, h] : [h, w])); const w = []; const h = []; for (let i = 0; i < sizes.length; i++) { w.push(newArr[i][0]); h.push(newArr[i][1]); } return Math.max(...w) * Math.max(...h); } 문제를 이해하고 더 큰 숫자를 배열에서 가장 앞쪽에 위치하게 하려고 했다. 처음엔 이중 for문을 통해서 풀어주려고 했는데 굳이 그러지 않아도 됐다. 가로 * 세로 이기 때문에 어처피 인덱스값은 2개만 있을 것이고 0,1 만 쓰므로 굳이 반복을 하지 않아도..
[풀이] function solution(s) { return s .toLowerCase() .split(" ") .map((str) => { return str .split("") .map((el, idx) => (idx % 2 === 0 ? el.toUpperCase() : el)) .join(""); }) .join(" "); } 1. s를 먼저 모두 소문자로 바꿔준다. → 단순히 예제만 보고 생각했을 때 모두 소문자라 생각을 못했는데.. 많은 가능성을 열어두고 생각해야 했다. 예제가 모두 소문자라 할지라도 여러가지 경우의 수가 있으며 인덱스 홀수 번째 문자가 대문자일 수도 있다. (이 생각을 못함) 나무를 보지말고 숲을 봐야한다. 코딩테스트를 풀 때는 히든케이스도 고려해야 한다. 2. 그리고 공백..
스택(Stack)과 큐(Queue)는 프로그래밍이라는 개념이 탄생할 때부터 고전적인 자료구조 중 하나이다. 이 두 자료구조는 자바스크립트에 내장되어있진 않지만 배열(Array)과 내장함수들을 이용해 스택과 큐를 흉내낼 수 있다. 또한 프로그래밍에 있어 중요한 자료구조이며 대부분의 알고리즘 문제를 풀 때 배열을 이용해 풀어도 통과하지만, 시간복잡도라던가 데이터의 양이 매우 큰 경우 통과할 수 없어 알고 있어야 한다. 스택 (Stack) LIFO(Last in, Last out) 원칙으로 만들어진 자료구조이며 가장 나중에 들어온 데이터가 먼저 나간다. (후입선출) 함수 실행 콘텍스트들이 쌓이는 콜스택과 브라우저 방문 기록이 쌓이는 히스토리 스택이 대표적이다. 서로 관계가 있는 여러 작업을 연달아 수행하며 이..
[풀이] function solution1(arr){ const result = []; for(let i = 0; i x !== arr[idx+1]); } solution 01 1. for문을 통해서 arr의 인덱스값을 다음 인덱스값과 비교했을 때 다르면 그 값을 다시 result 변수 안에 넣어준다. solution 02 1. filter 함수를 이용해서 위와 같이 풀어주면 끝! [코드 리뷰] function solution(arr) { const result = []; for (const el of arr) { const lastElement = result[result.length - 1]; if (lastElement !== el) result.push(el); } return result; } ..
자바스크립트는 함수 안쪽에 또 다른 함수를 선언하는 중첩 함수(Nested Functions)가 가능하다. 자바스크립트가 함수를 변수와 같이 값(value)처럼 다루기 때문이다. (자바스크립트에선 같은 이름의 변수와 함수를 선언하는 것 불가능하다.) 또한 중첩 함수는 최상위 레벨에만 작성이 가능하다. if 또는 while문 등 문장에서 작성할 수 없다. 1. 클린 코드 //유저가 무직자인지 확인한다. if(user.job == null){ ... } if(user.isUnemployed()){ ... } 두 코드는 같은 행동을 나타낸다. 1번 코드 예제는 주석으로 의도를 명시했지만 2번 코드 예제는 코드 그 자체로 의도를 표현한다. 1번 코드와 같이 주석으로 설명하는 것이 많아지면 코드가 길어지고 가독성..
mutable 1. 변할 수 있다. 2. 참조 타입 3. 해당 데이터 주소를 찾아 값을 변경한다. immutable 1. 불변, 변할 수 없다. 2. 원시 타입 3. 해당 데이터 주소와 별개의 새로운 주소에 값이 할당한다. 4. 문자열 [핵심] mutable은 원본 데이터를 변화시키려는 속성이고 immutable은 원본 데이터를 유지하려는 속성이다. Array Method - immutable of mutable 메서드 별로 달라서 자주 사용하는 것 알아두면 좋다. - concat() : immutable //concat() - immutable const arr1 = [1, 2, 3]; const arr2 = [4, 5]; const concatArr = arr1.concat(arr2); concatA..
hayeonn
Always Do it