Write-Up/Algorithm

프로그래머스 - 스킬트리

NONE_31D 2019. 3. 23. 15:37

C

#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include<string.h> // skill_trees_len은 skill_trees의 길이입니다. int solution(char* skill, char* skill_trees[], size_t skill_trees_len) { int answer = skill_trees_len; int skill_len = strlen(skill); //printf("%c",skill_trees[0][0]); = B 출력 int i, j, k, len, ttl, num; for(i=0;i<skill_trees_len;i++){ len = strlen(skill_trees[i]); //printf("len=%d\n", len); ttl=0; num=0; for(j=0;j<len;j++){//스킬트리 전수조사. 만약 1이 없으면 그대로 --임 if(num==1) break; for(k=0;k<skill_len;k++){ if(skill[k]==skill_trees[i][j]){ if(k>ttl){ answer--; num=1; break; } ttl++; } } } } return answer; }

작년 1학기 이후 간만에 짜본 C 코드

조금 복잡하게 짰는데

스킬 = ABC 일 경우, A = 0, B = 1, ... 이런 식으로 계산하는 코드

ttl이 스킬 순서를 저장하는 변수이고, num은 앞의 큰 for문을 break걸기 위한 변수이다.

//num 변수 사용 대신하여 쓸만한 구문을 찾아야하는데 솔직히 본 적이 없음

ttl은 0부터 시작하고, 만일 본인 스킬트리 중 일부가 스킬과 같다면 ttl과 비교하여 순서를 계산한다.

스킬의 순서보다 스킬트리에 저장된 스킬이 더 먼저 나왔다면, 브레이크 걸고 정답 개수에서 --연산.

효율성 테스트가 없어서 복잡도는 조금 클 것 같긴 하지만 별 탈 없이 클리어 되는 코드


'Write-Up > Algorithm' 카테고리의 다른 글

프로그래머스 - 소수의 합  (0) 2019.03.23
프로그래머스 - 완주하지 못한 선수  (0) 2019.03.23
프로그래머스 - 모의고사  (0) 2019.03.23
프로그래머스 - K번째 수  (0) 2019.03.23