Array 와 List(2023-09-19 TIL)

SeongH·2023년 9월 19일
0

<Array와 List의 차이>


1. Array의 특징

  • 배열은 연속된 메모리 공간으로 메모리 관리가 용이하다.
  • 배열의 값은 index로 접근하기 쉽기 때문에 빠르게 해당 값을 찾을 수 있다.
  • 동적 할당이 불가능하다(크기의 변동이 어려움)

2. List의 특징

  • 포인터를 사용하여 다음 데이터의 주소값을 가지고 있어 추가/삭제에 용이하다 (동적 할당이 가능하다)
  • 포인터로 다음 데이터의 주소값을 가지고있어 추가 메모리를 이용하므로 메모리 측면에서는 비효율 적이다.
  • 리스트에는 index가 없어서 값에 접근하기가 어렵다.

3. Array? List? 선택 조건

배열리스트의 가장 큰 차이점은 데이터를 할당 할 때에 데이터의 크기가 정해져 있냐에 차이점이 있다.
데이터의 동적 할당(요소의 추가/삭제)이 필요하다면 List를 사용하는 것이 좋다.



<List를 활용한 알고리즘 문제>


문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

제한사항
numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.

-처음 생각했던 풀이-

using System;

public class Solution 
{
    public int[] solution(int[] numbers) 
    {
        int[] answer = new int[100];//배열의 크기를 어떻게 정해야 할지 고민이 되었다.
        int temp = 0;
        int index = 0;
        
        for(int i = 0; i < numbers.Length; i++)
            for(int j = i+1; j< numbers.Length; j++)
            {
                temp = numbers[i]+numbers[j];
                
                var check = Array.Exists(answer, x => x == temp);
                if(check == false)
                {
                answer[index] = temp;
                index++;//요소를 넣어주는데에도 index 변수를 추가로 이용하게 되는 번거러움
                }
            
            }
        
         Array.Sort(answer);
                
        return answer;
    }
}

-다시 생각한 풀이-

using System;
using System.Collections.Generic;

public class Solution 
{
    public int[] solution(int[] numbers) 
    {
        List<int> answer = new List<int>();
        int temp = 0;
        
        for(int i = 0; i < numbers.Length; i++)
            for(int j = i+1; j< numbers.Length; j++)
            {
                temp = numbers[i]+numbers[j];
                
                if(answer.Contains(temp) == false)
                answer.Add(temp);
            
            }
        
         answer.Sort();
                
        return answer.ToArray();
    }
}

처음에 문제를 풀이할때, List 에 아직 익숙하지 않아서 Array를 사용한 풀이에만 집착했는데, 그러다보니 배열의 크기를 설정해 주는 곳에서 문제가 발생했고(일단 배열의 크기를 대충 정해주고 나중에 그것에 맞춰서 필요없는 요소들을 잘라주는 작업을 해야된다는 문제) 구해준 값을 배열안에 넣에 주는데에도 다소 번거로운 작업이 필요했다.

데이터의 크기가 계속 바뀌는 동적 할당이 필요하고 요소의 삽입과 삭제가 잦으므로 List 를 이용한다면 처음 어려움을 겪었던 배열의 크기를 설정해 줄 필요도 따로 없었고 요소를 추가해주는 일도 자유로워 더 편하게 코드를 작성 할 수 있었다.

profile
개발자 꿈나무

0개의 댓글