728x90
▶문제 : 코딩 테스트 연습 - 스킬트리 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 스킬트리
programmers.co.kr
▶코드 작성
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
// skill_trees_len은 배열 skill_trees의 길이입니다.
int solution(const char *skill, const char *skill_trees[], size_t skill_trees_len)
{
int answer = 0;
int alpha[26][2];//{스킬이 있다는 표시 1, 스킬을 배우는 순서}
int num;
for (int i = 0; skill[i] != '\0'; i++)
{
alpha[skill[i] - 'A'][0] = 1;//스킬이 있다는 표시
alpha[skill[i] - 'A'][1] = i;//스킬 배우는 순서
}
for (int i = 0; i < skill_trees_len; i++)
{
num = 0;//스킬을 배우는 순서 체크
for (int j = 0; skill_trees[i][j] != '\0'; j++)
{
if (alpha[skill_trees[i][j] - 'A'][0] == 1)//스킬이 있을 때
{
if (alpha[skill_trees[i][j] - 'A'][1] == num)//순서와 맞으면
{
num++;//다음 순서로
}
else//순서가 다르면
{
num = -1;
break;//종료
}
}
}
if (num > -1) answer++;//-1이 아니면 스킬에 문제가 없으므로 +1
}
return answer;
}
▶해석
alpha배열을 이용하여 skill배열에 있는 스킬 알파벳을 alpha배열의 배열 자리 alpha [skill [i]-'A']에 입력하여 있는지의 여부와 스킬 순서를 파악하였다. num변수로 스킬 순서를 확인하여 스킬의 순서가 맞으면 num++로 다음 스킬이 순서가 맞는지 확인하도록 하고, 한 번이라도 다르면 종료한다.
728x90
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 2 : 피보나치 수 C언어 (0) | 2022.02.20 |
---|---|
프로그래머스 Level 2 : n^2 배열 자르기 C언어 (0) | 2022.02.19 |
프로그래머스 Level 2 : 모음 사전 C언어 (0) | 2022.02.12 |
프로그래머스 Level 2 : 주식가격 C언어 (0) | 2022.02.04 |
프로그래머스 Level 2 : 큰 수 만들기 C언어 (0) | 2022.01.21 |
댓글