완전 탐색 [Programmers]

자몽·2021년 7월 31일
1

알고리즘

목록 보기
7/31

알고리즘: 완전 탐색

https://programmers.co.kr/learn/courses/30/parts/12230

모의고사 (level.1)

function solution(answers) {
    let answer = [0,0,0];
    const students = [[1,2,3,4,5],[2,1,2,3,2,4,2,5], [3,3,1,1,2,2,4,4,5,5]];
    let result=[]
    answers.map((t,index)=>{
        for(var i=0;i<3;i++){
            t===students[i][index%students[i].length] && answer[i]++;
        }
    })
    let max = answer.reduce((acc,cur)=>acc>cur ? acc : cur)
    answer.map((ans,i)=>ans===max && result.push(i+1))
    return result
}

소수 찾기 (level.2)

https://velog.io/@wkahd01/소수찾기

function solution(numbers) {
    // numbers 쪼개기
    numbers = numbers.split('')
    let answer = [];

    // 순열을 통한 결과값 구하기
    function permutation(arr, selectNum) {
        let result = [];
        if (selectNum === 1) return arr.map((v) => [v]);
        arr.forEach((v, idx, arr) => {
        const fixer = v;
        const restArr = arr.filter((_, index) => index !== idx);
        const permuationArr = permutation(restArr, selectNum - 1);
        let combineFixer = permuationArr.map((v) => [fixer, ...v]);
        result.push(...combineFixer);
      });
      return result;
    } 
    //
    let piece  = []
    for(var i=1;i<=numbers.length;i++){
        piece .push(permutation(numbers,i))
    }
    // 순열로 나온 경우의 '문자 배열'들을 '숫자'로 바꾸어주는 작업
    for(var i=0;i<piece .length;i++){
      for(var j=0;j<piece [i].length;j++){
        answer.push(Number(piece [i][j].join('')))
      }
    }

    let max = answer.reduce((acc,cur)=>acc>cur?acc:cur)

    // 소수 구하기(에라토스테네스의 체)
    let primeNumbers= new Array(max+1).fill(true);
    for (let i = 0; i * i <= max+1; i += 1) {
        i<2 && (primeNumbers[i]=false)
        if (primeNumbers[i]) {
            for (let j = i * i; j <= max+1; j += i) {
                primeNumbers[j] = false;
            }
        } 
    }
    // 구한 값이 소수인지 확인하는 작업
    answer=answer.filter(a=> primeNumbers[a]===true)
    // 중복 값 제거, 뒤늦게 넣어준 이유는 set 상태에서 여러 메서드들 사용 불가하기 때문에
    answer=new Set(answer)
    return answer.size
}

카펫 (level.2)

function solution(brown, yellow) {
    let yellowSqrt = Math.floor(Math.sqrt(yellow));
    for(let i=1;i<=yellowSqrt;i++){
        for(let j=yellow;j>=1;j--){
            if(i*j===yellow){
                if(brown === (i*2+j*2+4)){
                    return [j+2,i+2]
                }
            } 
        }
    }
}
profile
꾸준하게 공부하기

0개의 댓글