두수의 곱 = 최대공약수 * 최소공배수
function solution(n, m) {
let S = 0; //최소공배수
let L = 0; //최대공약수
//최대공약수 구하기
let num = n<m? n:m;
for(let i=1; i<=num; i++){
if(n%i===0 && m%i===0) L=i;
}
//최소공배수 구하기
S=n*m/L;
return [L, S];
}
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)), 1);
if(arr.length===0) arr.push(-1);
return arr;
}
Math.min(...arr)
와 같이 사용할 것 return arr.splice()
형태로 작성하면 '삭제된요소'를 리턴한다. 반드시 arr.splice()
해준 후에 return arr
를 해줘야 요소가 삭제된 배열을 가져올 수 있다.const x=arr.splice()
를 해주면 x에는 삭제된 요소가 들어간다. n이 어떤 양의 정수 x의 제곱인지 판단... (양의정수 x의 제곱이라면 x+1의 제곱 리턴, 아니라면 -1리턴)
function solution(n) {
n = Math.sqrt(n);
return (Number.isInteger(n)) (n+1)*(n+1):-1;
}
Math.pow(n+1, 2)
와 같이 쓰거나, (n+1)**2
와 같이 쓸 수 있다. function solution(s) {
return s=s.split(' ').map(word => {
let result='';
for(let i=0; i<word.length; i++) {
if(i%2===0) {
result+=word[i].toUpperCase();
}
else result+=word[i].toLowerCase();
}
return result;
}).join(' ');
}
s[0]=s[0].toUpperCase()
) 하지만, result+=s[0].toUpperCase()
와 같은 형태는 된다.123➡️6
function solution(n)
{
return n.toString().split('').map(v => Number(v)).reduce((a, b) => a+b, 0);
}
function solution(n) {
n = n.toString().split('').reverse().map(v => Number(v));
return n;
}
function solution(n) {
return Number(n.toString().split('').sort((a, b) => b - a).join(''));
}
sort()
는 기본적으로 문자정렬이기 때문에, 숫자를 정렬하고 싶은데 그냥 sort()를 하면 제대로된 정렬이 되지 않는다. 하지만 콜백함수를 넣으면 문자라도 숫자의 형태로 제대로 정렬된다.String.replace()
에 정규식이 아닌 문자열이 들어가면, 문자열이 발견되는 최초의 요소만 교체된다. 만약 해당하는 모든것을 교체하고 싶다면, 정규표현식을 사용하면 된다.(javascript에는 replaceAll이 없기때문에 주의!)for(let i=0; i<number.length; i++){
let regexAll=new RegExp(number[i], 'g');
if(s.includes(number[i])) s=s.replace(regexAll, i);
}
3➡️'수박수'
4➡️'수박수박'
function solution(n) {
let answer='';
for(let i=1; i<=n; i++){
answer+= (i%2)? '수':'박';
}
return answer;
}
function solution(n) {
return '수박'.repeat(n/2) + (n%2 === 1 ? '수' : '');
}
function solution(phone_number) {
let answer='';
const n=phone_number.length;
for(let i=0; i<n-4; i++){
answer+='*';
}
answer+=phone_number.substring(n-4, n);
return answer;
}
function solution(phone_number) {
return phone_number.replace(/\d(?=\d{4})/g, '*');
}
function solution(a, b) {
return a.reduce((acc, v, i) => acc + (v*b[i]), 0);
}
return A.map((a,i) => a.map((b, j) => b + B[i][j]));
x:2, n:5 ➡️ [2, 4, 6, 8, 10]
function solution(x, n) {
return Array(n).fill(x).map((v, i)=>v*(i+1));
}
function solution(absolutes, signs) {
return absolutes.reduce((acc, v, i) =>acc + (v*(signs[i]? 1 : -1)), 0);
}
if(signs[i]==='true')
로하면 안됨. signs안에 들어가있는 true, false는 문자가 아니라 boolean형태이기 때문에 if(signs[i])
와 같은 형태로 작성하면 if(true)
라는 소리와 같음.function solution(arr)
{
return arr.filter((v, i) => v !== arr[i+1]);
}
Number(s)
parseInt(s)
: 문자열에 숫자 연산으로 인해 숫자로 자동 파싱(아래도 마찬가지) s/1
Math.floor(s)
function solution(arr, divisor) {
arr=arr.sort((a, b)=>a-b).filter(val => val%divisor===0)
if(arr.length===0) arr.push(-1);
return arr;
}
(양끝의 합)*(숫자의갯수/2)
function adder(a, b){
return (a+b)*(Math.abs(b-a)+1)/2;
}
function solution(left, right) {
let answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
function solution(num){
let arr=Array.from({length:num+1}, ()=>1);
arr[0]=0, arr[1]=0; //0, 1은 소수가 아니다(제외)
for(let i=2; i*i<num; i++){
//아직 지워지지 않았을 때
if(arr[i]){
for(let j=i*i; j<=num; j+=i){
arr[j]=0; //지움(소수 아님)
}
}
}
//지워지지 않은 것 (값이 1인것)
return arr.filter(v => v===1).length;
}
for(let i=0; i<n-2; i++){
for(let j=i+1; j<n-1; j++){
for(let k=j+1; k<n; k++){
if(isPrime(nums[i]+nums[j]+nums[k])) answer++;
}
}
}
Date()
let set=new Set()
객체에 값 x를 추가하면(set.add(x)) Set은 객체이기 때문에 {x}의 형태로 담긴다. 객체는 {x1, x2, x3...}와 같이 담기며 이를 배열 형태로 만들어주기 위해서는 [...set]
과 같이 만들어 주면된다.const sum= x.toString().split('').map(v=>Number(v)).reduce((acc, v)=>acc+v, 0);
정규식.test(문자열)
은, 문자열이 정규식을 만족하는지 true or false로 리턴해준다. const re=/^\d{4}$|^\d{6}$/
: 숫자로만 길이가 4 or 6으로 구성됨num.toString(n)
: 10진수를 다른 진수(n)로 변환parseInt(num, n)
: 다른 진수를 10진수로 변환(num은 n진수인데 이걸 10진수로 변환하고 싶을 때)function solution(strings, n) {
return strings.sort((a, b)=>{
if(a[n]>b[n]) return 1;
else if(a[n]<b[n]) return -1;
else{
if(a>b) return 1;
else if(a<b) return -1;
else return 0;
}
});
}
localCompare()
메소드s.charCodeAt(i)
: s문자열의 i인덱스의 아스키를 가져옴String.fromCharCode(asc)
: 아스키코드를 string화https://programmers.co.kr/learn/courses/30/lessons/12982
padStart()
메소드를 사용할 수 있다.padStart(n, '0')
은 문자열의 길이를 n으로 지정하고 문자열의 길이가 n 미만이라면 앞을 '0'으로 채우는 메소드이다.padStart()
를 떠올리자! (끝을 채울 때는 padEnd())https://programmers.co.kr/learn/courses/30/lessons/1845
[...map].sort((a, b)=>b[1]-a[1])