프로그래머스 3-15 TIL

Seunggyu Jung·2023년 3월 15일
0

레벨 1 : 문자열 다루기 기본

Q .문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.


풀이

function solution(s) {
    let answer= s.split("");
    if (answer.filter((el) => (el) >= 0).length == answer.length) {
        if (answer.length === 4 || answer.length === 6) {  
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

해석

1단계. s.split("") : 매개변수가 문자열로 묶여있어, split("") 하나씩 나눠주고 배열로 만듦
2단계. answer.filter((el) => (el) >= 0).length == answer.length : 배열이 숫자로만 이루어져 있는지 판별함
3단계. answer.length === 4 || answer.length === 6 : 배열의 요소개수가 4개 또는 6개인지 판별함


분수의 덧셈

Q. 첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.


풀이

function solution(numer1, denom1, numer2, denom2) {
    var answer = [];
    let Num = numer1 * denom2 + numer2 * denom1;
    let Den = denom1 * denom2;
    for (let i = Math.min(Num,Den) ; i >= 2; i--){
        if (Num % i === 0 && Den % i === 0) {
            Num = Num / i;
            Den = Den / i;
        } 
    }
    answer.push(Num,Den);
    return answer;
}

해석

1단계. 분자와 분모를 교차하여 최종적인 분자 분모를 구함(요거 용어 까먹었네..?)
2단계. for (let i = Math.min(Num,Den) ; i >= 2; i--){}을 이용하여 최소 공배수를 구함
3단계. if (Num % i === 0 && Den % i === 0) { Num = Num / i; Den = Den / i; } 로 최소 공배수가 있으면 분모, 분자에 나눠줌
4단계. answer.push(Num,Den)


마치며

  • 문제에서 문자열 s의 길이가 4 혹은 6이고 때문에 시간을 너무 잡아먹음. 문제를 제대로 볼 필요가 있음

  • answer.length === 4 || answer.length === 6 가 사실 answer.length === 4 || 6 과 같은게 아닌가..?

  • for (let i = Math.min(Num,Den) ; i >= 2; i--){}
    for (let i = 2 ; i <= Math.min(Num,Den); i++){}로 하면 오류가 남....

Why..?

profile
감동을 주고픈 개발자(준비생)

0개의 댓글