2023-08-25 TIL

SeongH·2023년 8월 25일
0

새롭게 알게 된 것

-시간복잡도 (중요)
-공간복잡도 종요한 지표는 아님 (보통 컴퓨터에게 맡김) 지나치게 쓰는 것에만 주의하자!!

-시간복잡도 -> 최악의 경우를 상정하고 계산
O(1)
O(log N)
O(n^2)

-공간복잡도 -> 실제로 메모리 공간을 얼마나 사용하는지

<배열의 특징>
-인덱스로 접근
-고정된크기(생성할떄 고정되고 크기를 변경할 수 없음 변경하려면 새롭게 재할당 해야함)
-연속적인 메모리공간

배열 조회 : O(1)
삽입 삭제 : O(n)
정렬 : O(n log n)
검색 : 저열ㄹ되지 않으면 O(n) 정렬된 배열에서 이진 검색은 O(log n)

장점: 빠르게 접근 가능하고 메모리 효율적으로 관리 가능

단점: 삽입 삭제할 떄 다른 요소를 이동해야 하므로 비 효율적이다, 크기가 고정된다, 크기가 고정되어
있어서 메모리 낭비가 될 수 있다.

<리스트의 특징>

-링크드리스트-

-앞 뒤에 있는 사람만 알고 있으면 중간 삽입이 가능
-조회는 배열에 비해 느리지만 삽입삭제에 강점이 있다.
-조회 성능 O(N)

c#은 가비지 콜렉터때문에 사용(링크) 안되있으면 알아서 삭제해줌

c# 리스트는 가변형 배열을 사용하기때문에 인덱스로 요소에 접근이 가능하다.

알고리즘 코드 카타

<평균 구하기>

public class Solution 
{
public double solution(int[] arr) 
{
    double answer = 0;
    double sum = 0;
    for(int i = 0; i < arr.Length; i++)
    {
        sum += arr[i]; 
    }
    answer = sum/arr.Length;
    return answer;
}
}

<자릿수 더하기>

-내풀이-

public class Solution 
{
public int solution(int n) 
{
    int answer = 0;
    while(n != 0)
    {
        answer += n % 10;
        n = n / 10;
    }
    return answer;
}
}

-내가 생각 못한 다른 사람의 풀이-

public class Solution 
{
public int solution(int n) 
{
    int answer = 0;
    string nts = n.ToString();
    char[] stc = nts.ToCharArray();
    
    for(int i = 0; i < stc.Length; i++)
    {
        answer += int.Parse(stc[i].ToString());
    }
    
    return answer;
}
}

입력받는 int값을 string 형태로 변환해서 풀이하는 방법도 있다!!

문자열을 char로 변환하는 기술**

1.int.Parse 는 인자로 string 형태만을 받기 때문에
char형을 int값으로 바꾸기 위해서는 char.ToString()을 이용해야 한다.

2.char형은 아스키코드로 변환되기 때문에 48을 빼주는 방법도 있다(char 0은 아스키코드로 48)

<약수의 합>

public class Solution 
{
public int solution(int n) 
{
    int answer = 0;
    
    for(int i = 1; i < n+1; i++)
    {
        if(n % i ==  0)
        {
            answer += i;
        }
            
    }
 }
 }
profile
개발자 꿈나무

0개의 댓글