프로그래머스 Lv0 - 삼각형의 완성조건 (2), 숨어있는 숫자의 덧셈 (2), 다항식 더하기

찐새·2023년 4월 17일
0

코딩테스트

목록 보기
29/53
post-thumbnail

삼각형의 완성조건 (2)

https://school.programmers.co.kr/learn/courses/30/lessons/120868

코드

function solution(sides) {
    const [sidesMin, sidesMax] = sides.sort((a,b)=>a-b);
    let answer = 0;
    
    // sidesMax가 가장 긴 변인 경우
    for (let i = 1; i <= sidesMax; i++){
        if (i + sidesMin > sidesMax) {
            answer++;
        }
    }
    
    // 나머지 한 변이 가장 긴 변인 경우
    for (let i = sidesMax + 1; i < sidesMin + sidesMax; i++){
        if (sidesMin + sidesMax > i) {
            answer++;
        }
    }
    
    return answer;
}

풀이

두 가지 경우로 나눠 계산했다.

sidesMax가 가장 긴 변인 경우, 1부터 시작한 isidesMin의 합이 sidesMax보다 큰 경우가 있다면 answer를 하나씩 늘린다.

나머지 한 변이 가장 긴 변인 경우, sidesMax + 1부터 시작해 sides의 합보다 작은 값이 있으면 answer를 늘린다. 위에서 isidesMax 값과 같을 때를 계산했으므로, 여기서 sidesMax + 1했다.

숨어있는 숫자의 덧셈 (2)

https://school.programmers.co.kr/learn/courses/30/lessons/120864

코드

function solution(my_string) {
    return my_string.replace(/\D/g, " ").split(" ").reduce((a,c)=>a + +c, 0);
}

풀이

문자열에서 숫자가 아닌 것을 공백으로 만들고, 공백을 기준으로 배열화 했다. reduce를 이용해 배열의 합을 구했다.

참고

split의 구분자를 replace의 정규식으로 대체해도 되었다. 구분자에 정규식도 들어갈 수 있음을 잊지 말자.

다항식 더하기

https://school.programmers.co.kr/learn/courses/30/lessons/120863#

코드

function solution(polynomial) {
    let x = 0, num = 0;
    polynomial.split(" + ").forEach((v)=>{
        if (v.match(/\d+(?=x)/g)) {
            x += +v.match(/\d+(?=x)/g);
        } else if (v === "x") {
            x++;
        } else if (v.match(/\d/g)) {
            num += +v;
        }
    })
    if (x > 1) {
        return num ? `${x}x + ${num}` : `${x}x`;
    } else if (x === 1) {
        return num ? `x + ${num}` : `x`;
    } else {
        return `${num}`;
    }
}

풀이

+를 기준으로 배열화하여 요소를 정규식으로 검사했다. x앞에 계수가 있을 경우, 계수가 없을 경우, 상수인 경우로 분기했다.

반환값의 분기는 x가 1보다 큰 경우, x가 1인 경우, x가 0인 경우로 나눠 결과를 반환했다.

profile
프론트엔드 개발자가 되고 싶다

0개의 댓글