프로그래밍/코딩 문제 풀이

프로그래머스 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를 이용한 코드를 짜볼 예정.

실행 결과