되면한다

프로그래머스 - 광물 캐기 본문

코딩테스트준비

프로그래머스 - 광물 캐기

haeullee 2023. 10. 15. 21:42

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 특징

  • 구현

2. 구현 방법

  • 5개 묶음 별, 다이아, 철, 돌의 개수를 저장하는 벡터 v를 정의
  • 곡괭이로 캘 수 있는 광물까지 5개씩 순회하면서 v에 저장
  • v를 내림차순 정렬
  • 벡터를 순회하면서, 곡괭이에 따라 answer값 갱신

3. 코드

#include <bits/stdc++.h>

using namespace std;

vector<tuple<int, int, int>> v; //5개묶음별 d, i, s개수
int dia, ir, sto;

int solution(vector<int> picks, vector<string> minerals) {
    int answer = 0;
    int n = minerals.size();
    int fn = n/5;
    if(n%5 != 0) fn++;

    //picks 펼치기
    vector<int> _picks;
    for(int i = 0; i <3; i++)
    {
        while(picks[i] > 0)
        {
            _picks.push_back(i+1);
            picks[i]--;
        }
    }

    if(fn > _picks.size()) fn = _picks.size();
    dia = 0; ir = 0; sto = 0;
    
    for(int i = 0; i < fn; i++)
    {
        for(int j = 0; j < 5; j++)
        {
            if(i*5+j >= n) continue; 
            if(minerals[i*5+j] == "diamond")
            {
                dia++;
            }
            if(minerals[i*5+j] == "iron")
            {
                ir++;
            }
            if(minerals[i*5+j] == "stone")
            {
                sto++;
            }
        }
        v.push_back(make_tuple(dia, ir, sto));
        dia = 0; ir = 0; sto = 0;
    }

    sort(v.begin(), v.end(), greater<>());

    int pixIdx = 0;
    for(int i = 0; i < fn; i++)
    {
        if(pixIdx == _picks.size()) break;
        int dianum = get<0>(v[i]);
        int ironum = get<1>(v[i]);
        int stonenum = get<2>(v[i]);

        if(_picks[pixIdx] == 1)
        {
            int sum = dianum + ironum + stonenum;
            answer += sum;
        }
        if(_picks[pixIdx] == 2)
        {
            int sum = dianum * 5 + ironum + stonenum;
            answer += sum;
        }
        if(_picks[pixIdx] == 3)
        {
            int sum = dianum * 25 + ironum*5 + stonenum;
            answer += sum;
        }
        pixIdx++;

    }

    return answer;
}
Comments