숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
t | p | result |
---|---|---|
"3141592" | "271" | 2 |
"500220839878" | "7" | 8 |
"10203" | "15" | 3 |
using System;
using System.Collections.Generic;
public class Solution
{
public int solution(string t, string p)
{
int answer = 0;
string str = "";
char[] chars1 = t.ToCharArray();
List<string> strings1 = new List<string>();
List<long> numbers1 = new List<long>();
for (int i = 0; i < chars1.Length - (p.Length - 1); i++)
{
str += chars1[i];
for (int j = 1; j < p.Length; j++)
{
str += chars1[i + j];
}
strings1.Add(str);
str = "";
numbers1.Add(long.Parse(strings1[i]));
}
long nump = long.Parse(p);
for (int i = 0; i < numbers1.Count; i++)
{
if (numbers1[i] <= nump)
{
answer++;
}
}
return answer;
}
}
런타임 에러가 나서 수정 중 . . .
p의 길이가 int 자료형의 표현 범위를 넘어가서 에러가 났던 것이었다. long 자료형으로 바꿔주어 해결하였다.
전체적인 설계는 t의 값을 p의 길이로 쪼개어 List에 저장하고 List를 p와 크기 비교를 시켜서 풀었다.
필요한 사항
1. 위의 사항을 점검하고 알맞게 두 스크립트의 수정이 필요해 보인다.
1. FSM에 맞게 강의에 따라 우선 구현을 시도한다.
2. 정상적으로 무기 공격이 동작한다면 상태이상 시스템을 적용해 본다.
https://teamsparta.notion.site/231211-4c21f35ab2dc494eb063a324a94e54de
Player가 공격할 시 Monster에게 Knockback을 적용시키자.
TwinDagger가 오른손에 쥐어졌을 때 이슈를 해결하자.
// Monster.cs
private Rigidbody _rigidbody;
private float _knockbackTime = 0f;
protected virtual void Awake()
{
_rigidbody = GetComponent<Rigidbody>();
}
private void Start()
{
_rigidbody.isKinematic = true;
}
private void FixedUpdate()
{
_knockbackTime -= Time.deltaTime;
if (_knockbackTime <= 0f)
{
_rigidbody.isKinematic = true;
}
}
public void OnTriggerEnter(Collider other)
{
if (other == null)
{
return;
}
if (other.gameObject.layer == 8 && _rigidbody.isKinematic == true)
{
_rigidbody.isKinematic = false;
_rigidbody.AddForce((transform.position - other.transform.position).normalized,
ForceMode.Impulse);
_knockbackTime = 0.5f;
}
else
{
return;
}
}
monster가 navmesh로 동작하여 단순히 rigibody.AddForce를 할 경우 고장나는 이슈가 있었다. 그래서 충돌이 발생하면 rigidbody의 Kinematic을 껐다 켰다하며 knockback을 구현하였다.
// PlayerBaseStste
public virtual void Rotate(Vector3 movementDirection)
{
if(movementDirection != Vector3.zero)
{
Transform playerTransform = _stateMachine.Player.transform;
Quaternion targetRotation = Quaternion.LookRotation(movementDirection);
playerTransform.rotation = Quaternion.Slerp(playerTransform.rotation, targetRotation,
_stateMachine.RotationDamping * Time.deltaTime);
}
}
// PlayerComboAttackStste
public override void Rotate(Vector3 movementDirection)
{
}
플레이어가 공격하는 상태에서 방향키 조작 시 회전하는 이슈가 있었고, 진영님의 아이디어로 Rotate메서드를 추상 메서드로 바꾼 뒤 Override 후 메서드 내부를 비워두어 해결하였다.
예상으로는 Weapon과 Monster 둘 다 OnTriggerEnter 메서드를 사용하고 있어서 일어나는 이슈인 듯 하다. 내일 공유할 예정이다.
넉백 시스템 수정 중입니다.
걷는 모션 중 도구 스위칭 시 캐릭터가 멈추는 현상을 수정하였습니다.
공격 모션 중 캐릭터가 회전하는 이슈를 수정하였습니다.