프로그래밍/코딩 문제 풀이
프로그래머스 2023.06.07 (2Lv 광물 캐기)
Rozentea
2023. 6. 19. 16:51
문제
코딩
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
// picks_len은 배열 picks의 길이입니다.
// minerals_len은 배열 minerals의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
int solution(int picks[], size_t picks_len, const char* minerals[], size_t minerals_len) {
int answer = 0;
int mineralsIdx = 0;
for (int i = 0; i < 3; ++i)
{
int pickCount = picks[i];
for (int j = 0; j < pickCount; ++j)
{
for (int k = 0; k < 5; ++k)
{
if (mineralsIdx < minerals_len)
{
switch (i)
{
case 0:
{
if (strcmp(minerals[mineralsIdx], "diamond") == 0)
{
answer += 1;
}
else if (strcmp(minerals[mineralsIdx], "iron") == 0)
{
answer += 1;
}
else if (strcmp(minerals[mineralsIdx], "stone") == 0)
{
answer += 1;
}
}
break;
case 1:
{
if (strcmp(minerals[mineralsIdx], "diamond") == 0)
{
answer += 5;
}
else if (strcmp(minerals[mineralsIdx], "iron") == 0)
{
answer += 1;
}
else if (strcmp(minerals[mineralsIdx], "stone") == 0)
{
answer += 1;
}
}
break;
case 2:
{
if (strcmp(minerals[mineralsIdx], "diamond") == 0)
{
answer += 25;
}
else if (strcmp(minerals[mineralsIdx], "iron") == 0)
{
answer += 5;
}
else if (strcmp(minerals[mineralsIdx], "stone") == 0)
{
answer += 1;
}
}
break;
}
mineralsIdx++;
}
}
}
}
return answer;
}
문제는 풀렸지만, 별로 좋은 코드가 아닌거 같다. 심지어 입력이 예시 이외의 것이 나오면 테스트에 실패하는 경우도 나올 수 있는 코드기 때문에 수정할 여지가 있다.
문제를 푼 뒤, 다른 사람 코드를 찾아보니 dfs를 이용해 푸는 방법이 있는 것 같다.
공부를 추가로 한 다음 dfs를 이용한 코드를 짜볼 예정.