본문 바로가기
프로그래머스/C

[프로그래머스/C]프로그래머스 Level 2 : 스킬트리 C언어

by starfish22 2022. 2. 12.
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

댓글