코테언어로 프론트는 JS로만 본다길래 큰맘먹고 바꿔봄 (파이썬 -> JS)
프로그래머스 입문 100문제 풀면서 알게된 것들 정리
function cal_gcd(a, b) {
return a % b === 0 ? b : cal_gcd(b, a % b);
}
//arrow function
const gcd = (a,b) => a%b === 0 ? b : gcd(b, a%b);
angle = 91
// 틀린표현
if (0 < angle < 90)
console.log("예각");
else
console.log("예각아님");
// 옳은 표현
if( 0 < angle && angle < 90)
...
0 < angle
부분만 검증하기 때문numbers = [1,2,3,4,5,6,7,8,9,10];
let ans = 0;
for(i of numbers) {
ans += i
}
// answer = 55
let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
let citrus = fruits.slice(1, 3)
// fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
// citrus contains ['Orange','Lemon']
slice(begin, end)
형식splice()
랑은 다르니까 주의합시다let numbers = [1,2,3,4,5];
numbers.sort((a,b) => a-b);
console.log(numbers); // 1,2,3,4,5
numbers.sort((a,b)=>b-a);
console.log(numbers); // 5,4,3,2,1
numbers.sort()
해버리면 오름차순 정렬되는거 같지만 아니다. -> 정렬할 때 숫자 타입을 문자열 타입으로 형 변환해버림 const numbers = [10,3,8,4,1]
numbers.sort() // [1, 10, 3, 4, 8]
||
활용) array.sort((a,b) => Math.abs(n - a) - Math.abs(n - b) || a - b);
const str = "hello world";
const arr = [1,2,3,4,5];
console.log(str.length); // 11
console.log(arr.length); // 5
const mystring = "abcd";
mystring2 = mystring.replaceAll("b","");
console.log(mystring2); // acd
const my_String = "abcd";
const my_Array = [...my_String]; // ['a', 'b', 'c', 'd']
'abc'.repeat(-1); // RangeError
'abc'.repeat(0); // ''
'abc'.repeat(1); // 'abc'
'abc'.repeat(2); // 'abcabc'
arr = [1,2,3]
console.log(Math.max(arr)); // NaN
// 스프레드 활용
console.log(Math.max(...arr)); // 3
// sort 활용
arr.sort((a,b) => b-a);
return arr[0]; // 3
arr
의 경우 [1,2,3]...arr
의 경우 1 2 3Map을 연습하기 아주 좋은 문제가 있다. 최빈값 구하기 문제
const solution = (array) => {
let map = new Map();
// map의 key와 value 세팅
for (i of array)
map.set(i, (map.get(i)||0) + 1); // or연산자는 참이 먼저 나온 값을 반환한다.
console.log(map);
// value 값으로 오름차순
ar = [...map].sort((a,b)=>b[1]-a[1]);
console.log(ar);
// 원소가 한 개일경우 바로 ar[0][0] return
// ar[0][1] > ar[1][1] : 최빈값이 한 개일 경우 ar[0][0] return
return ar.length === 1 || ar[0][1] > ar[1][1] ? ar[0][0] : -1;
}
Map.has(key): 해당 key가 Map에 포함되어 있는지 확인
Map.size: 맵의 키-값 쌍 갯수
Map.length: 값이 0인 속성.
Map.delete(key): key-value 쌍 삭제
Map.forEach(): 맵의 모든 키-값 쌍에 대해서 콜백함수 사용
array.reduce( 콜백함수, 초기값 )
array.reduce((누산값(acc), 현재요소값(cur), 현재요소의index(idx), 현재배열) => {
return 다음누산값;
}, 초기누산값);
// 사용예시
numbers = [1,2,3]
console.log(numbers.reduce((acc, cur) => acc + cur , 0)); // 6
let a = 1
let b = '2'
console.log(a+(b*1)); // 3
* 1
해주면 됨+
를 붙이는 방법도 있다Number()
parseInt()
사용, 반대의 경우는 toString()
string.split(separator, limit)
let str = 'abcdefg';
let arr = str.split("");
console.log(arr); // [ 'a', 'b', 'c', 'd', 'e', 'f', 'g']
str = "abc defg"
arr = str.split(" ")
console.log(arr); // [ 'abc', 'defg']
const 식 = '1+2 = 3';
const [calc, result] = 식.split(' = ');
console.log(calc); // 1+2
console.log(result); // 3
const elements = ['Fire', 'Air', 'Water'];
console.log(elements.join());
// Expected output: "Fire,Air,Water"
console.log(elements.join(''));
// Expected output: "FireAirWater"
console.log(elements.join('-'));
// Expected output: "Fire-Air-Water"
console.log(isNaN("S")); // true
console.log(isNaN("1")); // false
console.log(isNaN(1)); // false
a == NaN
이런게 안됨 isNaN으로 확인해야함string(or array).includes( searchString, length )
'abzcd'.includes( 'z' ) // true
'abzcd'.includes( 'z', 3 ) // false
Math.sqrt(0); // 0
Math.sqrt(1); // 1
Math.sqrt(2); // 1.414213562373095
Math.sqrt(9); // 3
Math.sqrt()
로 구하기 Math.sqrt(n) % 1 === 0
이렇게 하자numlist.filter((e,i) => num % 2 == 0);
const mystring = "abcd";
console.log(mystring[0]); // a
'a'.toUpperCase(); // A
'A'.toLowerCase(); // a
el === el.toUpperCase()
이런 느낌으로..console.log(Array.isArray([1, 2, 3])); // true
console.log(Number.isInteger(5)); // true
console.log(isNaN('a')); // true
console.log(Math.round(0.9));
// Expected output: 1
console.log(Math.round(5.95), Math.round(5.5), Math.round(5.05));
// Expected output: 6 6 5
console.log(Math.round(-5.05), Math.round(-5.5), Math.round(-5.95));
// Expected output: -5 -5 -6
console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// Expected output: Array [2, 4, 6]
// 1. 반복문 사용
const row = 2;
const column = 2;
const arr = new Array(row);
console.log(arr); // [ <2 empty items> ]
for (var i = 0; i < column; i++) {
arr[i] = new Array(2);
}
console.log(arr); // [ [ <2 empty items> ], [ <2 empty items> ] ]
// 2. ES6 문법 사용
// arr[5][2] (빈 배열 생성)
const arr1 = Array.from(Array(5), () => new Array(2));
// arr[5][2] (null로 초기화하여 생성)
const arr2 = Array.from(Array(5), () => Array(2).fill(null))
function solution(num_list, n) {
const answer = [];
for(let i =0; i<num_list.length/n; i++){
answer.push(num_list.slice(i*n,i*n+n))
}
console.log(answer);
}
slice
를 이용하자! -> 배열 형태로 원소가 들어감const array = [1,1,2,2,3,3]
const set = [...new Set(array)];
console.log(set); // [1,2,3]
new Set(중복 제거할 배열)
을 이용해 새로운 배열에 담아준다.var str = 'HTML,CSS,JavaScript';
var count = str.split(',').length - 1; // 2
,
의 개수를 세는거임.const str = "aabac";
console.log(str.indexOf("a")); // 0
console.log(str.lastIndexOf("a")); // 3
str.indexOf('a') === str.lastIndexOf('a')
이런 느낌으로 사용해도 좋다.const my_string = "abc";
const r_string = my_string.split('').reverse().join(''); // cba
const num = 10;
console.log(num.toString(2)); //"1010" (10진수인 num을 2진수로)
console.log(parseInt(num, 2)); //2 (2진수인 num을 10진수로)
num.toString(2)
: 8진수 16진수 다 됨parseInt(num, 2)
const db = [["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]];
const map = new Map(db);
console.log(map);
// Map(3) { 'rardss' => '123', 'yyoom' => '1234', 'meosseugi' => '1234' }
new Map()
안에 넣어서 바로 새로운 map을 만들 수 있다.let sorted = arr.slice().sort((a,b)=>b-a);
slice()
를 사용![...arr]
해도됨function financial(x) {
return Number.parseFloat(x).toFixed(2);
}
console.log(financial(123.456));
// Expected output: "123.46"
console.log(financial(0.004));
// Expected output: "0.00"
toFixed(소수자릿수)
로 소수점 고정 가능let solution=(a,b)=>(b+b).indexOf(a)
let array = Array(101).fill(0).map((v, i) => i);
let str = "123";
let paddedStr = str.padStart(5, '0');
console.log(paddedStr); // 출력: "00123"
const array = [1, 2, 3, 4, 5];
array.splice(2, 1);
console.log('array', array); // [1,2,4,5]
array.splice(2, 1)
: 2번 인덱스부터 1개만큼 삭제한다const solution = (arr) => arr.filter((e,i) => e != arr[i-1]);
let obj = {};
for (let num of arr) {
obj[num] = (obj[num] || 0) + 1;
}
let answer = Object.values(obj).filter(val => val > 1);
obj[num]
값이 없다면 0 있으면 그 값에 + 1Objct.values(obj)
로 value 값들을 배열 형태로 가져올 수 있다. (keys도 당연히 가능)Object.entries(obj)
로 key와 value둘 다 가져올 수 있다. for(let [key, value] of Object.entries(parkingObj)){
...
matrix = matrix[0].map((_, i) => matrix.map(row => row[i]));
const fail = stages.filter(stage => stage === i).length;
filter
메소드를 활용해서 조건에 맞는 원소를 필터링해 그 길이를 가져오자const result = Object.entries(obj)
Object.entries()
를 활용한다. result.map(e => e[0]); // or e[1]
let map = new Map([
['c', 2],
['a', 4],
['d', 1],
['b', 3],
]);
// Map(4) { 'c' => 2, 'a' => 4, 'd' => 1, 'b' => 3 }
같은 코드일 때
for(let i=0 ...)
방식이for(let s of ...)
보다 빠름
일반 for문 사용하자
https://school.programmers.co.kr/learn/courses/30/lessons/42746
// sort((a,b) => ((b+a) - (a+b)))
[234, 243, 23, 2]
.map((e) => e.toString())
.sort((a, b) => b + a - (a + b))
.join('');
[234, 243, 23, 2]
=> "243234232"const a = [1,2,3];
console.log(a === [1,2,3]); // false
const a = "ABC";
const b = a.charCodeAt(0);
console.log(b); // 65
const c = "A"
console.log(c.charCodeAt()); // 65
charCodeAt()
활용const isPrime = (num) => {
if (num === 0 || num === 1) return false;
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) return false;
}
return true;
};
Math.sqrt(num)
까지만 구하면됨const time = "12:00,12:14";
const timeArr = time.split(','); // [ '12:00', '12:14' ]
const timeDiff = (new Date(`1970-01-01 ${timeArr[1]}:00`) - new Date(`1970-01-01 ${timeArr[0]}:00`)) / 60000;
console.log(timeDiff); // 14
new Date()
사용let minNum = Number.MIN_SAFE_INTEGER // -9007199254740991
let maxNum = Number.MAX_SAFE_INTEGER // 9007199254740991
const operands = expression.match(/[0-9]+/g).map(Number);
// 1~20까지 증가하는 4 * 5 배열을 만든다고 가정
let initialValue = 1;
const rows = 4;
const cols = 5;
const arr = Array.from({ length: rows }, () =>
Array.from({ length: cols }, () => initialValue++)
);
console.log(arr);
Array.from()
의 length
파라미터를 활용