2023-09-11 TIL

SeongH·2023년 9월 11일
0
post-thumbnail

새롭게 알게 된 것

Unity

  • 상속을 받았다고 하더라도 private 도 같이 상속을 받기는 하지만 자식이라고 하더라도 그 private 변수에 접근 할 수는 없다. 그래서 나오게 된것이 'protected' 접근 제한자 이다. (protected는 상속관계끼리 사용할 때에는 public 이고 외부에서 접근할 때에는 private 역할을 한다!!)
  • 싱글톤 패턴:
    해당 객체의 메모리를 정적으로 할당하여 하나의 객체에만 접근
    생성자를 다른 곳에서 새롭게 선언을 하더라도 이미 정적으로 선언된 객체가 반환되기 때문에 중복되어 생성되는 것을 방지
    다른 객체들과 결합도가 낮아져서 병렬처리나 동기화에 어려움

Git

  • github 100mb용량 제한
    에셋 페키지 프로젝트세팅스 3개만 올리자 unity로 협업 할때는(나머지는 자동생성됨) -> gitignore 사용

  • 같은 곳을 수정하면 conflict 발생

  • find 계열 함수는 없는 취급하고 작성하라(성능이나 안정성 면에서 안좋은 경우가 많다-> 앞에있는
    오브젝트 배열을 전부 돌면서 찾기 때문에)

  • linq도 성능저하(오브젝트 많을때) 몇개없을 때는 써도 됨 아니면 걍 배열 사용

  • 안쓰는(비어있는) 함수는 제때제때 지워두는 것이 성능 향상에 도움이 된다.
    ex) 비어있는 업데이트 함수

  • 계속 컴포넌트를 얻어오지말고 필요한 데이터를 한번 저장했다가 활용하는 캐싱을 이용하라!
    ex) Bullet bullet = GetCompnent();

  • 연쇄호출을 피하자(코드가 길어지면 보기힘들어지고 계산결과가 null일수가 있다.)

  • 객체지향에서는 객체가 직접 움직이게 하는 것이 좋다?
    -> find 대신 싱글톤으로 되어있는 인스턴스에 먼저 접근하고 그 아래에 있는곳으로 접근하는 방식으로
    사용하는것이 좋다(이런 구조로 돌아가게 코드를 작성하는것이 좋음)

알고리즘 코드 카타

<문자열 내림차순으로 배치하기>

문제 설명
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항
str은 길이 1 이상인 문자열입니다.

-내 풀이-

using System;

public class Solution 
{
    public string solution(string s) 
    {
        string answer = "";
        char[] temp = s.ToCharArray();
        
        // 배열을 오름차순으로 정렬함
        Array.Sort(temp);
        
        // 배열을 뒤집는다 = 내림차순으로 바뀜
        Array.Reverse(temp);
        answer = new string(temp);
        
        return answer;
        
    }
}

<부족한 금액 계산하기>

문제 설명
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.

제한사항
놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

-내 풀이-

using System;

class Solution
{
    public long solution(int price, int money, int count)
    {
        long sumPrice = 0; 
        for(int i = 1; i < count+1; i++)
        {
            sumPrice += price*i;
        }
        if(money - sumPrice >= 0)
        return 0;
        else
        return (long)Math.Abs(money - sumPrice);
    }
}

-다른 사람의 풀이-

using System;

class Solution
{
    public long solution(int price, int money, int count)
    {
        long result = price * ((long)count * (1 + count) / 2);

        if(result <= money) {
            return 0;
        }
        else 
        {
            return result - (long)money;    
        }
    }
}

나는 반복문을 사용하였는데 위와 같이 수학에 자신이 있다면
등차수열의 합 공식을 이용하면 반복문을 사용하지 않고도 문제 풀이를 할 수 있다.
등차수열 같은경우에는 프로그래밍에 정말 자주 쓰이므로 어느정도 알아두자!!

profile
개발자 꿈나무

0개의 댓글