티스토리 뷰

# 마지막 두 원소

 


문제 설명
정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.

제한사항
2 ≤ num_list의 길이 ≤ 10
1 ≤ num_list의 원소 ≤ 9


입출력 예 설명
입출력 예 #1
마지막 원소인 6이 그전 원소인 1보다 크기 때문에 6 - 1인 5를 추가해 return합니다.
입출력 예 #2
마지막 원소인 5가 그전 원소인 7보다 크지 않기 때문에 5의 두 배인 10을 추가해 return합니다.

 
 


내가 작성한 답

class Solution {
    public int[] solution(int[] num_list) {
        
        int len = num_list.length;
        int[] answer = new int[len + 1];
        
        for(int i=0;i<len;i++){
            answer[i] = num_list[i];
        }
        
        if(num_list[len-1]>num_list[len-2]){
            answer[len]=num_list[len-1]-num_list[len-2];
        }
        else{
            answer[len]=num_list[len-1]*2;
        }
        return answer;
    }
}

 

 

 
 

코드 작성 과정에서 발생한 몇 가지 실수와 그에 대한 설명은 다음과 같습니다:

1. 배열 인덱스 참조 오류

if(num_list[num_list.length]>num_list[num_list.length-1]){
    answer=num_list[num_list.length]-num_list[num_list.length-1];
}
else{
    answer=num_list[num_list.length]*2;
}
  • 실수: num_list[num_list.length]는 배열의 길이를 초과하는 인덱스를 참조하여 ArrayIndexOutOfBoundsException 예외를 발생시킨다. 그렇기 때문에 오류가 발생했다.
  • 해결 방법: 배열의 마지막 요소는 num_list[num_list.length - 1]로 참조해야 한다. 배열의 길이는 인덱스보다 1 크기 때문에, 마지막 요소는 num_list.length - 1이다.

2. 변수 타입 불일치

answer=num_list[len]-num_list[len-1];
  • 실수: int 값을 int[] 타입의 변수 answer에 할당하려고 하여 오류가 발생했다.
  • 해결 방법: answer 배열을 적절한 크기로 생성하고 필요한 값을 배열의 마지막 요소로 추가해야 한다.

3. 배열 길이 1에 대한 처리 누락

  • 실수: 배열의 길이가 1인 경우를 처리하지 않았다. num_list[len - 2]는 존재하지 않으므로 예외가 발생할 수 있다.
  • 해결 방법: 배열의 길이가 1인 경우를 따로 처리하여 예외가 발생하지 않도록 한다.

최종 수정된 코드

아래는 실수를 수정한 최종 코드이다:

class Solution {
    public int[] solution(int[] num_list) {
        int len = num_list.length;
        int[] answer = new int[len + 1]; // 기존 배열 크기 + 1
        System.arraycopy(num_list, 0, answer, 0, len);
        
        if (len > 1) {
            if (num_list[len - 1] > num_list[len - 2]) {
                answer[len] = num_list[len - 1] - num_list[len - 2];
            } else {
                answer[len] = num_list[len - 1] * 2;
            }
        } else {
            // 배열의 길이가 1인 경우, 비교할 전 요소가 없으므로 마지막 요소를 두 배로 추가
            answer[len] = num_list[len - 1] * 2;
        }
        
        return answer;
    }
}

요약

  1. 배열 인덱스 참조 오류: 배열의 인덱스는 0부터 시작하므로, num_list[num_list.length] 대신 num_list[num_list.length - 1]을 사용해야 한다.
  2. 변수 타입 불일치: int 값을 int[] 타입에 할당하려고 한 오류를 수정했다.
  3. 배열 길이 1에 대한 처리 누락: 배열 길이가 1인 경우를 따로 처리하여 예외가 발생하지 않도록 했다.

이러한 점들을 유념하면서 코드를 작성하면, 배열 인덱스 문제와 변수 타입 문제를 피할 수 있다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday