자료구조 및 알고리즘/JavaScript Practice

JS Practice) 프로그래머스로 공부하기 5

Ryomi 2023. 3. 5. 16:14
728x90
반응형

 

1. 삼각형의 완성조건 (1)

: 삼각형의 세 변의 길이가 담긴 배열 slides가 주어질 때, 삼각형을 만들 수 있으면 1, 없으면 2 반환

(가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 함) 

- 내가 짠 코드

// 전
function solution(sides) {
    let maxNum = Math.max(...sides);
    let sum=0;
    for(let i=0; i<sides.length; i++) {
        sum = sum + sides[i]
    }
    
    if(maxNum < sum-maxNum) {
        return 1
    } else {
        return 2
    }
}


// 후
function solution(sides) {
    let maxNum = Math.max(...sides);
    let sum = sides.reduce((acc, cur) => acc + cur) - maxNum;
    console.log(maxNum)
    return maxNum < sum ? 1 : 2
}

 

- solution

function solution(sides) {
    sides = sides.sort((a,b) => a-b)
    return sides[0]+sides[1] > sides[2] ? 1 : 2;
}

 

 

2. 배열의 유사도

: 두 배열이 가진 동일 원소의 개수 반환

- 내가 짠 코드

// 전
function solution(s1, s2) {
    let answer = 0
    for(let i=0; i<s1.length; i++) {
        for(let j=0; j<s2.length; j++) {
            if(s1[i] === s2[j]){
                answer++
            }
        }
    }
    return answer
}

// 후
function solution(s1, s2) {
    let similar = 0;
    for(let i=0; i<s1.length; i++){
        if(s2.indexOf(s1[i]) > -1) {
            similar++
        }
    }
    
    return similar
}

- solution

function solution(s1, s2) {
    const intersection = s1.filter((x) => s2.includes(x));
    return intersection.length;
}

 

 

3.  자릿수 더하기

: 정수 n이 매개변수로 주어질 때, n의 각 자리의 숫자 합 return

- 내가 짠 코드

// 전
function solution(n) {
    let answer = 0
    var arr = n.toString();
    let arr2 = arr.split("")
    for(let i=0; i<arr2.length; i++) {
        answer = answer + Number(arr2[i])
    }
    return answer;
}

// 후
function solution(n) {
    let str = n.toString();
    let answer = 0
    for(let i of str) {
        answer += Number(i)
    }
    return answer
}

- solution

function solution(n) {
    return (n+'').split('').map(v=>+v).reduce((a,v)=>a+v,0);
}

 

 

4. 숨어있는 숫자의 덧셈(1)

: 문자열 내 모든 한 자릿수 자연수의 합 반환

- 내가 짠 코드

// 전
function solution(my_string) {
    let arr = my_string.split("");
    let arr2 = [];
    
    for(let i=0; i<arr.length; i++){
        if(Number(arr[i])) { // 문자는 NaN라서 falsy
            arr2.push(Number(arr[i]))
        }
    }
    
    return arr2.reduce((a, c) => a + c, 0);
}

// 후
function solution(my_string) {
    let arr = my_string.split("").filter(el => Number(el))
    return arr.reduce((acc, cur) => acc + (+cur), 0)
}

- solution

function solution(my_string) {
    const answer = my_string.replace(/[^0-9]/g, '')
                            .split('')
                            .reduce((acc, curr) => acc + Number(curr), 0);
    return answer;
}

function solution(my_string) {
    return my_string.replaceAll(/[^\d]/g, '').split('').map(v=>+v).reduce((a,v)=>a+v,0);
}

// /[0-9]/g : 숫자 0~9를 모두 찾는다
// /[^0-9]/g : 숫자 0~9가 아닌 것을 모두 찾는다

// /[^\d]/g : 숫자(/d)를 제외한 나머지를 모두 찾는다

 

reference)

 

정규표현식, 이렇게 시작하자!

매일 쓰는 것도, 가독성이 좋은 것도 아니지만, 모르면 안되는 정규표현식. 저는 이렇게 공부하기 시작했습니다! (자바스크립트를 기준으로 설명합니다)

heropy.blog

 

 

 

5. 문자열 안에 문자열

: 두 개의 문자열 str1, str2가 주어질 때, str2가 str1에 포함되면 1, 포함되지 않으면 2 반환

- 내가 짠 코드

// 전
function solution(str1, str2) {
    var answer = str1.match(str2);
    if(answer === null) {
        return 2
    } else {
        return 1
    }
}

// 후
function solution(str1, str2) {
    return str1.match(str2) ? 1 : 2
}

- solution

function solution(str1, str2) {
    return str1.split(str2).length > 1 ? 1 : 2
}

 

 

728x90
반응형