프로그래머스 LV.1 풀이

김민석·2025년 3월 6일
post-thumbnail

과일 장수

function solution(k, m, score) {
    var answer = 0;
    score=score.sort((a,b)=>a-b); //올림차순 정렬
    while(score.length >=m) { // m보다 크거나 같을때 까지 반복
        let slice=score.splice(-m); //큰것부터 m개만큼 자른 후 
        let mini =Math.min(...slice); // 그것중에 최솟값을
        answer+=mini*m; // 최솟값* m을 해서  더해줌
    }
    return answer;
} // 내림차순 후 찾으면 시간초과 올림차순 후 뒤에서 부터 자르며 반복

덧칠하기

function solution(n, m, section) {
    let arr= new Array(n).fill(1); //n크기의 배열 1로 초기화
    let cnt=0; // 페인트칠 횟수
    for(let i=0;i<section.length;i++) { //section의 요소 index -1 은 0으로 만들어줌 
        arr[section[i]-1]--;
    }
    for(let i=0;i<arr.length;i++){  // arr배열 돌면서
        if(arr[i] ===0) { // 0인것을 만나면 
        for(let j =i;j<i+m;j++) { // 만난순간 부터 +m번쨰까지 ++해줌
            arr[j]++;
        }
        cnt++; //횟수 증가
      }
    }
    return cnt;
}

소수 찾기

function solution(n) {
    // index[0]이 존재하므로 배열을 num + 1로 선언  0과 1은 소수가 아님 => false 처리
    let arr = new Array(n + 1).fill(true).fill(false,0,2);
        // 제곱근까지만 반복
    for(let i = 0; i <= Math.sqrt(n); i++) {
        if(arr[i]) {
            for(let j = i * i; j <= n; j += i) {
                // 배수라면 소수가 아님 => false
                arr[j] = false 
            }
        }
    }
        // true 값만 출력 
    return arr.filter(el => el).length
} 

소수 만들기

function isPrime(n) {
    if(n <2) return false;
    for(let i =2;i<=Math.sqrt(n);i++) {
        if(n%i===0)
            return false;
    }
    return true;
} // 소수인지 확인 

function solution(nums) { // 완전탐색 3개의 숫자를 더한 수가 소수인지
    var answer = 0;   // 그냥 반복문 3번돌리면 된다!
    for(let i =0;i<nums.length-2;i++) {
        for(let j=i+1;j<nums.length-1;j++) {
            for(let k =j+1;k<nums.length;k++) {
                let sum =nums[i]+nums[j]+nums[k];
                if(isPrime(sum))
                    answer++;
            }
        }
    }
    
    return answer;
}

실패율

function solution(N, stages) {
    var answer = []; 
    var failstage =[];// 머무르고 있는 스테이지 
    var namuzi = stages.length; // stages 길이
    for(let i =1;i<=N;i++)
        {
            let cnt= 0;
            for(let j =0;j<stages.length;j++)
                {
                    if(stages[j]===i) // stages를 돌며 스테이지와 같은 숫자면 머무르고 있는 것
                        cnt++;
                }
            failstage.push({ stage:i ,failRate:cnt/namuzi}); // 스테이지 숫자와 스테이지 머무르고 있는 사람과 / 스테이지 통과한 사람의 수
            namuzi-=cnt; // 머무른 사람은 다음 스테이지를 갈 수 없음
        }
   failstage.sort((a,b)=>{
        if(b.failRate ===a.failRate) // failRate가 같다면 순서대로 
                  return a.stage-b.state;
       return b.failRate -a.failRate; // 아니면 내림차순
    });
    answer =failstage.map((item)=>item.stage) //stage만 출력하게함/
    return answer;
}

옹알이(2)

function solution(babbling) {
    var answer = 0;
    let arr= ["aya","ye","woo","ma"];
    for(let i =0;i<babbling.length;i++) {
        for(let j =0;j<arr.length;j++) {
            if(babbling[i].includes(arr[j].repeat(2))) // 같은것 연속 반복 X 
                break;
            babbling[i] =babbling[i].split(arr[j]).join(' '); 
            //join(' ')공백을 나눠 arr[j]로 split했을때 나눠진 양옆에 문자끼리 합쳐졌을 때 arr[j]가 될 것을 방지!
        }
         if(babbling[i].split(" ").join("").length === 0) //다시 합쳤을때 길이가0이면 카운트
            answer++;
        
    }
    return answer;
}

[1차] 다트게임

function solution(dartResult) {
    let result=[];
    let num =0;
    for(let i=0;i<dartResult.length;i++) {
        let s =dartResult[i]; 
        if(s>='0' && s <="9"){ // 숫자이면 
            if(s==="1" && dartResult[i+1]==="0") { // 10이 나올 수 있음 현재 s가 1이면서 다음 s+1이 0이면
                num=10;
                i++; // i++를 해줘 0까지 넘어가게 해줌 
            }
            else num=Number(s);
        }
        else if(s==="S") {
                result.push(num);
        }
        else if(s==="D") {
            result.push(Math.pow(num,2));
        }
        else if(s==="T") {
           result.push(Math.pow(num,3));
        }
        else if(s==="*") {
                result[result.length-1] *= 2;
                result[result.length-2] *= 2;
        }
        else if(s==="#") {
            result[result.length-1] *= -1; 
        }
    }
 
    return result.reduce((a,b)=>a+b,0);
}
profile
나만의 기록장

0개의 댓글