배열과 리스트의 가장 큰 차이점은 데이터를 할당 할 때에 데이터의 크기가 정해져 있냐에 차이점이 있다.
데이터의 동적 할당(요소의 추가/삭제)이 필요하다면 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 를 이용한다면 처음 어려움을 겪었던 배열의 크기를 설정해 줄 필요도 따로 없었고 요소를 추가해주는 일도 자유로워 더 편하게 코드를 작성 할 수 있었다.