[프로그래머스/C++]Lv.1 - 과일 장수

YH J·2023년 5월 31일
0

프로그래머스

목록 보기
104/168

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/135808

내 풀이

score을 내림차순으로 정렬한 뒤 m씩 끊어가면서 끊은 묶음에서 가장 뒤에있는 숫자 ( 가장 작은 숫자 ) 에 m을 곱한값을 더해간다.
커스텀 cmp함수 대신 greater()을 넣으면 굳이 cmp를 구현하지 않아도 된다.

내 코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

bool cmp(int a, int b)
{
    return a > b;
}

int solution(int k, int m, vector<int> score) {
    int answer = 0;
    
    sort(score.begin(), score.end(),cmp);
    for(int i = m - 1; i < score.size(); i+=m)
    {
        answer += score[i] * m;
    }
    return answer;
}

다른 사람의 풀이

#include <vector>
#include <queue>

using namespace std;

priority_queue<int> pq;

int solution(int k, int m, vector<int> score) {
    int answer = 0;
    for(int i=0; i<score.size(); i++)
        pq.push(score[i]);
    while(pq.size() >= m) {
        for(int i=0; i<m-1; i++) pq.pop();
        answer += pq.top() * m;
        pq.pop();
    }
    return answer;
}

다른 사람의 풀이 해석

priority queue를 사용하였다. (우선순위 큐) 기본적으로 내림차순이다.
m-1갯수를 pop한 다음 top에있는 숫자를 m을 곱해서 answer에 +해준다.
그 후 pop한다.
컨테이너의 차이가 있지만 방식은 비슷하다.

profile
게임 개발자 지망생

0개의 댓글