프로그래머스 LV.1 풀이

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

K번쨰 수

function solution(array, commands) {
    var answer = [];
    commands.forEach((c)=> {
        let arr =array.slice(c[0]-1,c[1]);// c[0]부터 c[1]까지 자르고
        arr =arr.sort((a,b)=>a-b); // 오름차순 정렬
        answer.push(arr[c[2]-1]); // c[2] 번째 숫자 push 
    })
    return answer;
}

문자열 내 마음대로 정렬하기

function solution(strings, n) {
    strings.sort((a,b)=> { // strings 배열 끼리의 비교 
        if(a[n]>b[n]) return 1;  // 먼저 a[n] 번째 끼리의 비교  
        if(a[n]<b[n]) return -1; 
        if(a[n]===b[n]) { // 같다면 사전순으로 정렬
            if(a>b) return 1;
            if(a<b) return -1;
         return 0;
        }
    });
    return strings;
}

콜라 문제

function solution(a, b, n) {
    var answer = 0;
    while(n>=a) { // 콜라 빈병의 개수가 교환가능할 때 까지 
        n-=a; // 빈병 a개를 빼고 
        n+=b; // b개를 받아옴 
        answer+=b; // 받아온 콜라 체크
    }
    return answer;
}

명예의 전당

function solution(k, score) {
    var answer = [];
    let result = [];
    for(let i =0;i<score.length;i++) {
        answer.push(score[i]); // 배열에 집어넣음
        answer.sort((a,b)=>b-a); // 넣을때 마다 내림차순 정렬
        if(answer.length>k) { // k개가 넘으면 젤 낮은 숫자 pop
            answer.pop();
        }
        result.push(answer[answer.length-1]); // 결과 배열에 제일 낮은 숫자를 넣어줌
    }
    
    return result;
}

[1차]비밀지도

function solution(n, arr1, arr2) {
    var answer = [];
    let arr =[]
    for(let i =0;i<arr1.length;i++) { //arr1 과 arr2가 길이가 같으므로 그냥 진행 
        let result ='';  
        let a1 = arr1[i].toString(2);// 2진수로 변환 
        let a2 = arr2[i].toString(2);// 2진수로 변환
        let sum = (Number(a1)+Number(a2)).toString(); // 변환한 2진수를 숫자로 바꿔 더한 후 다시 문자열로 변환 
        if(sum.length < n) { // n보돠 작을 경우 n만큼 0을 채워줌 
            for(let j =0;j<n-sum.length;j++)
                result+='0';
        }
        result+=sum; // 문자열로 받아주고 
        arr.push(result); // 배열에 채워줌
    }
    return arr.map((item)=>item.split('').map((item)=>item > 0 ? '#' : ' ').join('')); 
    // 채워준 배열을 돌며 배열안에 문자열을 split으로 나눠 그 후 map을 이용해 0보다 크다면 # 반환 아니면 공백 반환 후 join으로 문자열로 반환하게함
}

카드 뭉치

function checkCards (cards, goal) {
    const cardsFilteredByGoal = goal.filter((item, index) => cards.includes(item));
    // cards에 있는 것들만 뽑아냄 
    const cardFilteredByIndex = cardsFilteredByGoal.filter((item, index) => item === cards[index]);
    // cards의 순서와 cardFilteredByIndex가 같은지 확인
    if(cardFilteredByIndex.length !== cardsFilteredByGoal.length){
        return false;
    } // 길이가 다르면 false 같으면 true
    
    return true;
}

function solution(cards1, cards2, goal) {    
    if(checkCards(cards1, goal) && checkCards(cards2, goal)){
        return "Yes";
    }
    
    return "No";
}

추억 점수

function solution(name, yearning, photo) {
    photo =photo.map((item)=> { // photo 돌면서
        let sum =0;
        for(let i =0;i<name.length;i++) {
            if(item.includes(name[i])) //name을 포함하고 있으면 더해줌!
               sum+= yearning[i];
        }
        return sum;
    });
    return photo;
}

포켓몬

function solution(nums) {
    let n =Math.floor(nums.length/2); // nums배열의 절반만큼만 최대로 가질 수 있음
    let set = [...new Set(nums)]; // 중복은 될 수 없으니 중복 제거 
    if(set.length >=n) //set이 n 보다 크다면 최대값 
        return n;
    else
        return set.length;
}

기사단원의 무기

function solution(number, limit, power) {
    let arr =[];
    for(let i=1;i<=number;i++) {
        let cnt =0;
        for(let j=1;j<=Math.sqrt(i);j++) {// 약수 구하기
            if(i%j === 0) { // 나눠지면 ++
                cnt++;
                if(i/j !== j) // 나눳을 때 몫도 ++ 
                     cnt++;
            }      
        }
        arr.push(cnt);
    }
    return arr.map((item)=> item >limit ? power : item).reduce((a,b)=>a+b,0);
    // limit보다 크다면 power만큼 아니면 그냥 반환 후 다 더해줌
}

2016년

function solution(a, b) {
    let days =[31,29,31,30,31,30,31,31,30,31,30,31];
    let day =["FRI","SAT","SUN","MON","TUE","WED","THU"];
    let sum =0;
    for(let i=0;i<a-1;i++) { // 5월이면 4월까지 더하고
        sum+=days[i];
    }
    sum+=b-1; // 나머지 일수 더함 
    return day[sum%7];
}

모의고사

function solution(answers) {
    var answer = []; 
    let a=0;
    let b=0;
    let c=0;
    const one =[1,2,3,4,5]; // 반복 패턴 
    const two =[2,1,2,3,2,4,2,5];// 반복 패턴
    const three =[3,3,1,1,2,2,4,4,5,5];// 반복 패턴
    for(let i=0;i<answers.length;i++) {
        if(answers[i]===one[i%one.length]) 
            a++;
        if(answers[i]===two[i%two.length])
            b++;
        if(answers[i]===three[i%three.length])
            c++;
    }
    let maxi =Math.max(a,Math.max(b,c)); // a,b,c를 비교해 최댓값
    if(maxi ===a) // 최댓값이랑 같다면 answer에 push
        answer.push(1);
    if(maxi===b)
        answer.push(2);
    if(maxi===c)
        answer.push(3);
    return answer;
}
profile
나만의 기록장

0개의 댓글