Animated Turtle

Prgrammers

프로그래머스 문제풀기 22일차

훙구 2023. 6. 6. 23:55

...

728x90
반응형

프로그래머스 문제풀기 22일차.

1. 3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.

10진법 3X 마을에서 쓰는 숫자 10진법 3X 마을에서 쓰는 숫자
1 1 6 8
2 2 7 10
3 4 8 11
4 5 9 14
5 7 10 16

정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    let num = 0;
    for(let i=1; i<=n; i++){
        num++;
        while(num.toString().includes(3) || num % 3 == 0){
            num++;
        }
    }
    return num;
}

 


2. 점 네 개의 좌표를 담은 이차원 배열  dots가 다음과 같이 매개변수로 주어집니다.

  • [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

function solution(dots) {
    let inc1 =
        (dots[1][1] - dots[0][1]) / (dots[1][0] - dots[0][0]) ==
        (dots[2][1] - dots[3][1]) / (dots[2][0] - dots[3][0]);
    let inc2 =
        (dots[0][1] - dots[2][1]) / (dots[0][0] - dots[2][0]) ==
        (dots[1][1] - dots[3][1]) / (dots[1][0] - dots[3][0]);
    let inc3 =
        (dots[0][1] - dots[3][1]) / (dots[0][0] - dots[3][0]) ==
        (dots[1][1] - dots[2][1]) / (dots[1][0] - dots[2][0]);
    if (inc1 || inc2 || inc3) {
        return 1;
    } else {
        return 0;
    }
}

 


3. 선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.
lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.

선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.

function solution(lines) {
    let line1 = [];
    let line2 = [];
    let line3 = [];
    let count = {};
    let answer = 0;
    for (let i = lines[0][0]; i < lines[0][1]; i++) {
        line1.push(i);
    }
    for (let i = lines[1][0]; i < lines[1][1]; i++) {
        line2.push(i);
    }
    for (let i = lines[2][0]; i < lines[2][1]; i++) {
        line3.push(i);
    }
    let all = [...line1, ...line2, ...line3];
    all.forEach((el) => {
        count[el] = (count[el] || 0) + 1;
    });
    for (let cou in count) {
        if (count[cou] > 1) {
            answer++;
        }
    }
    return answer;
}

 


4. 소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

  • 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.

두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.

function solution(a, b) {
    let result = 1;
    let arr = [];
    for(let i=b; i>1; i--){
        if(a % i ==0 && b % i == 0){
            a /= i;
            b /= i;
        }
    }
    let div = 2;
    while(b >= 2){
        if(b % div == 0){
            b /= div;
            arr.push(div)
        } else {
            div++;
        }
    }
    arr.forEach(e => {
        if(e !== 2 && e !== 5){
            result = 2;
        }
    });
    return result;
}



728x90
반응형