코딩테스트 연습(Lv0 / 085 ~ 088)- Day22 dp, 수학, 조건문, 배열

Kang.__.Mingu·2023년 1월 20일
0

코딩테스트(Lv0)

목록 보기
23/26
post-thumbnail

저주의 숫자 3

저주의 숫자 3

문제

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


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


function solution(n) {
    let count = 0;
    for(let i = 1; i <= n; i++){
        count++;
        while(count % 3 === 0 || count.toString().includes('3')){
            count++;
        }
    }
    return count;
}
// 3의 배수랑 숫자 3을 사용안함
// 둘 중의 하나의 조건을 만족?

평행

평행

문제

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

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

function solution(dots) {
    const same = []
    
    for(let i = 0 ; i < dots.length; i++) {
        // i번째를 제외한 그 다음부터 반복
        for(let j = i + 1 ; j < dots.length; j++) {
            // y좌표의 차이 / x좌표의 차이 = 기울기
            const num = (dots[i][1]-dots[j][1]) / (dots[i][0]-dots[j][0]);
            // 기울기가 같다면 평행
            if(same.includes(num)){
                return 1;
            } 
            same.push(num);
        }
    }
    return 0;
}
// 평행이 된다고 하면 하나의 점에서 하나의 점을 뺀 A와 똑같이 뺸 B가 같아야됨
// 결국엔 다 계산을 때려봐야알 듯
// 경우의 수가 3개야

겹치는 선분의 길이

겹치는 선분의 길이

문제


function solution(lines) {
    let arr = new Array(200).fill(0);
    let cnt = 0;
    for(let i = 0; i < lines.length; i++){
        for(let j = lines[i][0] + 100; j < lines[i][1] + 100; j++){
            arr[j]++;
        }
    }
    for(let i = 0; i < arr.length; i++){
        if(arr[i] > 1) {
            cnt++;
        }
    }
    return cnt;
}
// 제한사항을 잘 봐야될 듯
// -100 ~ 100까지

// 배열로 만드는데 문자열이 0인 배열로 200길이

이 문제 풀 때 어떤 방식으로 접근해야할지 모르겠어서 밑에 링크 영상 봄
문제 해결 영상


유한소수 판별하기

유한소수 판별하기

문제

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

기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.


function solution(a, b) {
    // 분모가 기준이니까
    let getB = 1;
    for(let i = 1; i <= b; i++){
        if(a%i === 0 && b%i === 0){
            getB = i;
        }
    }
    
    b = b / getB;
    
    // 나눌 수 있을 만큼 나눠줘야 유한소수인지 아닌지 판별 가능
    while(b % 2 === 0){
        b = b / 2;
    }
    while(b % 5 === 0){
        b = b / 5;
    }
    return b === 1 ? 1 : 2;
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글