되면한다
프로그래머스 - 광물 캐기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/172927
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;
}
'코딩테스트준비' 카테고리의 다른 글
프로그래머스 - 124 나라의 숫자 (구현) (0) | 2023.11.01 |
---|---|
프로그래머스 SQL (0) | 2023.10.26 |
프로그래머스 - 경주로 건설 (0) | 2023.10.08 |
2020 카카오 블라인드 채용 (0) | 2023.09.09 |
백준 - 숨바꼭질 시리즈 (0) | 2023.09.06 |
Comments