TIL 0311 최종 프로젝트 - 2 / FSM 고민 / 기사단원의 무기

강성원·2024년 3월 12일
0

TIL 오늘 배운 것

목록 보기
48/70

적의 FSM 설계 고민

새로운 FSM 설계 기법을 공부하고, FSM 구조를 잡는 고민만 하다가 하루가 간 것 같다.
급하면 안되지만,, 그래도 너무 더디다..

일단 생각난 것 적어보면

  • 배경은 넓지 않은 한정된 공간(아마 엄폐물도 없을듯)이다.
  • 거리에 상관 없이 항상 플레이어를 공격 한다.
    -> 포탑이 아닌 이상 움직이게 하는 무언가가 필요하다.
  • 적들의 행동 FSM은 하나의 코드로 이루어지겠지만, 스크립터블 오브젝트 같은 것을 이용해서 범위, 공격 쿨타임 등을 다양화 시키면 좋을 것 같다.

일단 여기까지..

기사단원의 무기

프로그래머스의 문제 "기사단원의 무기" 문제에 내가 전에 공부한 약수의 개수를 찾는 알고리즘을 적용시켜봤다.

public class Solution {
    public int solution(int number, int limit, int power) {
        int answer = 0;
        
        for(int i = 1; i <= number; ++i)
        {
            int attack = DivisorCount(i);
            
            if(attack <= limit)
                answer += attack;
            else
                answer += power;
        }
        
        return answer;
    }
    
    public int DivisorCount(int num)
    {
        int count = 0;
        
        for(int i = 1; i * i <= num; ++i)
        {
            if(i * i == num)
                ++count;
            else if (num % i == 0)
                count += 2;
        }
        
        return count;
    }
}
  • 함수 DivisorCount가 매개변수의 약수의 개수를 찾아주는 함수이다.
  • 약수의 개수는 주어진 수의 제곱근을 중심으로 정확하게 균형을 이룬다.
  • 주어진 수가 144라면 제곱근인 12까지만 약수를 구해주면 된다.
    1~12까지의 144의 약수는 1, 2, 3, 4, 6, 8, 9, 12 이다.
    그리고 12~144까지의 약수는 12, 16, 18, 24, 36, 48, 72, 144이다.
  • 애초에 1~12까지의 약수로 144를 나누면 12~144까지의 약수들이 나온다.
    그래서 1~sqrt(n) 까지의 약수의 개수를 구하고 2를 곱해주면 주어진 수의 약수의 개수가 나온다.
profile
개발은삼순이발

0개의 댓글