JS 알고리즘 8주차

박규원·2023년 5월 29일
0

JS 알고리즘

목록 보기
7/11

평행

💡 점 네 개의 좌표를 담은 이차원 배열  `dots`가 다음과 같이 매개변수로 주어집니다.
  • [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

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

문제 조건을 잘못이해해서
시간을 오래 잡아먹었다. 시간이 너무 아깝다
하지만 문제조건은 충분히 오해할만했다.
내 잘못아니다.

function solution(dots) {    
    var gra=[];
    var comp=[];
    var answer=0;
    for(var i=0;i<dots.length-1;i++){
        for(var j=i+1;j<dots.length;j++){
            if((dots[i][0]-dots[j][0])==0)
                continue;
            else
                gra.push((dots[i][1]-dots[j][1])/(dots[i][0]-dots[j][0]));
        }
    }
    
    if(gra[0]==gra[5])answer=1;
    if(gra[1]==gra[4])answer=1;
    if(gra[2]==gra[3])answer=1;
    
    return answer;
    
}

OX 퀴즈

💡 덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 `quiz`가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
function solution(quiz) {
    var answer = [];
    
    for(var i =0;i<quiz.length;i++){
        if(quiz[i].split(' ')[1]==='-'){
            (parseInt(quiz[i].split(' ')[0])-parseInt(quiz[i].split(' ')[2]))==parseInt(quiz[i].split(' ')[4]) ? answer.push('O') : answer.push('X');
        }
        else if(quiz[i].split(' ')[1]==='+'){
            (parseInt(quiz[i].split(' ')[0])+parseInt(quiz[i].split(' ')[2]))==parseInt(quiz[i].split(' ')[4]) ? answer.push('O') : answer.push('X');
        }
    }
    
    return answer;
}

로그인 성공?

💡 머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 `id_pw`와 회원들의 정보가 담긴 2차원 배열 `db`가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.
  • 아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.
  • 로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 “fail”를, 아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 “wrong pw”를 return 합니다.
function solution(id_pw, db) {
    var answer = '';
    
    for(var i=0;i<db.length;i++){
        if(id_pw[0]==db[i][0]&&id_pw[1]==db[i][1]) {answer="login"; break;}
        else if(id_pw[0]==db[i][0]&&id_pw[1]!=db[i][1]){answer="wrong pw"; break;}
        else if(id_pw[0]!=db[i][0]) answer="fail";
    }
    
    return answer;
}

구슬을 나누는 경우의 수

💡 머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 `balls`와 친구들에게 나누어 줄 구슬 개수 `share`이 매개변수로 주어질 때, `balls`개의 구슬 중 `share`개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
// 재귀함수 풀이, 수행시간 느림
// function solution(balls, share) {
//     var answer = 0;
//     var i,j;
    
//     function b(n,k){
//         if(k==0||n==k)return 1;
//         else 
//             return b(n-1,k-1)+b(n-1,k);
//     }
    
//     return b(balls,share);
// }

//DP풀이, 수행시간 빠름
function solution(balls, share) {
    var answer = 0;
    var arr = new Array(balls+1).fill(0).map(() => new Array(share+1));
    
    for(var i=0;i<=balls;i++){
        for(var j=0;j<=Math.min(i,share);j++){
            if(j==0 || i==j) arr[i][j]=1;
            else arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
        }
    }
    return arr[balls][share];
}
profile
Just do IT

0개의 댓글