반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
알고리즘 : DFS
언어: C++
INT_MAX를 정의했더니 프로그래머스에서 안먹혀서 일단 큰 수를 임의 작성함
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
int answer = 99999999;
void dfs(vector<string> &m, int d, int ir, int s, int cost, int idx){
// 개수가 적고, 곡괭이의 개수가 0일 경우 끝
if (m.size() <= idx || d + ir + s == 0) {
answer = min(answer, cost);
return;
}
// 해당 곡괭이로 캘 수있는 광물의 수
int goIdx = min(int(m.size())-idx, 5);
// 다이아몬드 곡괭이는 cost가 1씩 증가하므로 idx와 동일하게 증가
if (d > 0) {
dfs(m, d-1, ir, s, cost + goIdx, idx + goIdx);
}
int goCost = 0;
if (ir > 0) {
for (int i = idx; i < idx + goIdx; i++) {
if (m[i] == "diamond") {
goCost += 5;
} else {
goCost += 1;
}
}
dfs(m, d, ir-1, s, cost + goCost, idx + goIdx);
}
goCost = 0;
if (s > 0) {
for (int i = idx; i < idx + goIdx; i++) {
if (m[i] == "diamond") {
goCost += 25;
} else if (m[i] == "iron") {
goCost += 5;
} else {
goCost += 1;
}
}
dfs(m, d, ir, s-1, cost + goCost, idx + goIdx);
}
}
int solution(vector<int> picks, vector<string> minerals) {
dfs(minerals, picks[0], picks[1], picks[2], 0, 0);
return answer;
}
728x90
반응형
'개발아닌개발 > 알고리즘문제풀이' 카테고리의 다른 글
[백준 알고리즘] 1260번 문제 DFS와 BFS (0) | 2025.05.21 |
---|---|
[백준 알고리즘] 2667번 문제 단지번호 붙이기 (0) | 2025.05.20 |
[백준 알고리즘] 2011번 문제 암호코드 (0) | 2021.11.08 |
[백준 알고리즘] 15954번 문제 인형들 (0) | 2021.11.08 |
댓글