정수 리스트 num_list
가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
num_list
의 길이 10num_list
의 원소 9num_list | result |
---|---|
[2, 1, 6] | [2, 1, 6, 5] |
[5, 2, 1, 7, 5] | [5, 2, 1, 7, 5, 10] |
입출력 예 #1
입출력 예 #2
using System;
using System.Linq;
public class Solution {
public int[] solution(int[] num_list) {
//배열을 초기화 하면서 배열의 길이를 정해준다. 배열 끝에 수를 추가하니 받은 배열의 크기에 1을 더해준다.
int[] answer = new int[num_list.Length + 1];
//삼항 연산자를 이용해 마지막 배열에 넣을 수를 넣어준다.
int lastNum =
//num_list 배열의 마지막 수가 그 전 수보다 클 때
num_list[num_list.Length - 1] > num_list[num_list.Length - 2]
//true라면 배열의 마지막 수와 그 전수를 빼주고
? num_list[num_list.Length - 1] - num_list[num_list.Length - 2]
//false라면 마지막 수에 2를 곱해준다.
: num_list[num_list.Length - 1] * 2;
//answer 배열에 num_list의 배열을 넣어준다.
for(int i = 0; i < num_list.Length; i++)
{
answer[i] = num_list[i];
}
//answer의 마지막 배열에 위에 구했던 값을 넣어준다.
answer[answer.Length - 1] = lastNum;
return answer;
}
}
이번 문제는 배열에 대한 이해도가 있어야 해결할 수 있는 문제다.
보통 배열의 길이를 알아내려면 Length
를 사용하는데 이것은 배열의 길이를 구하는 것이지 배열의 마지막 자리에 있는 값을 구하는게 아니기 때문이다.
먼저 배열에 대해 간단하게 짚어볼텐데 자세히 알아보면 메모리까지 나오지만 아직 여기까지는 이해하지 못했기에 간단한 부분만 알아봤다.
배열을 만들면 배열의 인덱스는 아래와 같이 나온다.
배열의 인덱스는 0부터 시작한다. 위 배열의 경우 Length 즉, 길이 10인 배열이다.
a[]의 대괄호 안은 인덱스를 받는 자리다 즉, 인덱스를 벗어난 a[a.Length]는 에러가 출력된다.
이유는 인덱스는 0부터 시작하지만 배열은 1부터 시작하기 때문이다.
인덱스는 9까지 있고 Length는 10이라는 차이가 발생한다.
a[10]을 입력해도 같은 에러가 나온다.
위와 같은 각자 다른 길이의 배열 문제를 해결하기 위해 Length
를 사용했는데 그냥 사용하게 되면 배열의 인덱스를 벗어나기 때문에 에러가 출력된다.
때문에 인덱스의 값을 맞춰주기 위해 -1을 사용해 인덱스 값을 맞춰주는 것을 활용하는게 배열의 마지막 값을 구할 수 있다.
처음에 배열의 길이는 출력이 안된다는 것을 알고 있었는데 이유가 기억나지않아 이해를 못하고 있다가 인덱스를 떠올리자 고민하고 있던 부분이 풀렸다.
코딩할때도 항상 어이없는 실수 때문에 고민하는 부분이 많았는데 너무 단편적으로만 생각하는 습관을 버려야겠다고 생각했다.