TIL
20240123 TIL
[폴른]
2024. 1. 23. 20:50
Today I Learned :
1. 알고리즘 (프로그래머스)를 풀다가 타임아웃 이슈가 발생
기본 풀이는 O(n^3) 인데 이걸 낮추기 위해 Array.Sort()를 사용(최고 O(2n^2)로 판단)하였는데
일부 예시에서 타임아웃이 발생. Sort 부분으로 추측.
삼중 for문은 정상적으로 작동함.
문제에서 테스트케이스가 어떻게 들어오는건지 궁금하다.
// O(n^3)
public class Solution {
public int solution(int[] number) {
int answer = 0;
int n = number.Length;
for (int i = 0; i < n - 2; i++)
{
for (int j = i + 1; j < n - 1; j++)
{
for (int k = j + 1; k < n; k++)
{
if (number[i] + number[j] + number[k] == 0)
{
answer++;
}
}
}
}
return answer;
}
}
// O(n^2)
public class Solution {
public int solution(int[] numbers) {
{
Array.Sort(numbers); // 배열을 정렬
int count = 0;
int length = numbers.Length;
for (int i = 0; i < length - 2; i++)
{
int left = i + 1;
int right = length - 1;
while (left < right)
{
int sum = numbers[i] + numbers[left] + numbers[right];
if (sum == 0)
{
count++;
left++;
right--;
// 중복된 값의 개수만큼 추가
while (left < right && numbers[left] == numbers[left - 1])
count++;
while (left < right && numbers[right] == numbers[right + 1])
count++;
}
else if (sum < 0)
{
left++;
}
else
{
right--;
}
}
}
return count;
}
}
2. Input System 문서 업데이트
3. 상호작용 기능 개발
상호작용 대상에게 Collider 2D 를 붙이고 IsTrigger 체크.
나와 충돌하여 트리거가 발생하면 하고자하는 이벤트를 처리한다.
아래 코드는 Enter 하는 경우 충돌중인 상태와 충돌한 대상을 저장해놓고 유저의 Input 이벤트를 기다린다.
Exit 하면 위 상황을 해제한다.
Input 이벤트가 들어오는 경우 저장해놓은 데이터를 통해서 다음 이벤트를 발생시켰다.
private void OnTriggerEnter2D(Collider2D collision)
{
if (_levelCollisionLayer.value == (_levelCollisionLayer.value | (1 << collision.gameObject.layer)))
{
//Debug.Log("충돌 중");
IsNearby = true;
_interactInfo.SetActive(true);
NPCStats npcStats = collision.GetComponent<NPCStats>();
type = npcStats.type;
}
}
private void OnTriggerExit2D(Collider2D collision)
{
IsNearby = false;
_interactInfo.SetActive(false);
_dialog.SetActive(false);
}
4. 싱글톤 컨트롤
C# Generic으로 만들어서 사용하고 싶은데 컨트롤이 아직 어렵다.
씬이 넘어가는 경우 새로운 싱글톤을 발생시키는데 이 경우 컨트롤을 별도로 하여 Destroy 해줘야 한다.
그런데 여러군데에서 참고하여 만들어진 추상화 싱글톤을 쓰고있는데 뭔가 깔끔하게 작동하지 않는다.
그리고 싱글톤에 부모가 있는 경우 파괴되지 않고 부모부터 새로 생성된다.(DontDestroyOnLoad가 여러개 생성됨)
개발을 좀 더 진행하면서 테스트해봐야 할듯하다