2023-09-08 TIL

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

Unity

새롭게 알게 된 것

  • 오브젝트가 생성되고 파괴될 때 Instantiate/Destroy를 사용하게 되면 성능 소모와 프레임 저하가 발생할 수 있으므로
    오브젝트 풀링 패턴 사용

  • queue 형 자료는 선입선출의 구조

  • (1) Enqueue : 큐 맨 뒤에 어떠한 요소를 추가
    (2) Dequeue : 큐 맨 앞쪽의 요소를 삭제하고 삭제한 값 반환

  • Instantiate(objectl, Transform parent); -> 오브젝트에 부모오브젝트를 할당
    Instantiate(Object original, Vector3 position, Quaternion rotation); -> 오브젝트의 위치를 할당
    ex) Instantiate(pollingobj, this.transform) -> 오브젝트의 부모를 이 오브젝트로함

알고리즘 코드 카타

<약수의 개수와 덧셈>

문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ left ≤ right ≤ 1,000

-내 풀이-

using System;

public class Solution {
    public int solution(int left, int right) 
    {
        int answer = 0;
        for(int i = left; i <= right; i++)
        {
            if(Math.Pow((int)Math.Sqrt(i), 2) != i )
            answer += i;
            else
            answer -= i;
        }
        return answer;
    }
}

처음에 문제를 보자마자 직접 약수의 개수를 구하는 방법도 있겠지만
제곱수의 약수의 갯수는 홀수라는 것을 이용해서 문제를 풀어야 겠다고 생각했는데
제곱근이 정수임을 판별하는 방법이 도무지 떠오르지 않았다.
고민을 하던 중 Math.Pow() 로 거듭제곱을 이용하는 방법이 떠올랐고 제곱근을 int형으로
짤라버리고 다시 제곱을한다면 제곱수가 자기 자신이 나오지 않는다는 것을 이용해서 문제를 풀이했다.

<이상한 문자 만들기>

문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

-내 코드-

public class Solution 
{
    public string solution(string s) 
    {
        string answer = "";
        string[] ward = s.Split(' ');
        
        for(int i = 0; i < ward.Length; i++)
        {
            for(int j = 0; j < ward[i].Length; j++)
            {
                if(j % 2 == 0)
                    answer += char.ToUpper(ward[i][j]); 
                else
                    answer += char.ToLower(ward[i][j]);
            }
            if( i != ward.Length-1)
                answer += " ";
        }
        
        return answer;
    }
}

문제를 풀다가 다시 한번 되새길 수 있었던 중요한 사실인데 'ward[i][j]' 는 char형 값일 뿐이다
'ward[i][j] = 새로운 값' 처럼 직접 초기화를 해주어야 실제 ward[][] 값이 바뀌는 것인데 ToUpper(ward[i][j]) 를 해 놓고
왜 실제 ward[i][j] 안에 있는 값이 변하지 않는지에 대해서 고민하던 문제가 있었다. 마찬가지로 ToUpper(ward[i][j])도
ward[i][j]를 대문자로 바꾸어준 char형 값에 지나지 않는다


-다른 사람의 풀이-

public class Solution {
public string solution(string s) {
string answer = "";
int num = 0;

    for(int i = 0; i < s.Length; i++)
    {
        answer += num % 2 == 0 ? s[i].ToString().ToUpper() : s[i].ToString().ToLower();

        num = s[i] == ' '? 0 : num + 1;

    }


    return answer;
}

}

이건 다른 사람이 풀이 했던 방식인데 애초에 공백은 대문자로 바꾸어 주던 소문자로 바꾸어주던 상관없이
공백이기 때문에 Split으로 따로 나누어 주지 않았고 대, 소문자를 구분해줄 num변수를 새롭게 추가해서
한번의 반복문으로도 깔끔하게 풀이했다.

profile
개발자 꿈나무

0개의 댓글