티스토리 뷰
# 마지막 두 원소
문제 설명
정수 리스트 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;
}
}
요약
- 배열 인덱스 참조 오류: 배열의 인덱스는 0부터 시작하므로, num_list[num_list.length] 대신 num_list[num_list.length - 1]을 사용해야 한다.
- 변수 타입 불일치: int 값을 int[] 타입에 할당하려고 한 오류를 수정했다.
- 배열 길이 1에 대한 처리 누락: 배열 길이가 1인 경우를 따로 처리하여 예외가 발생하지 않도록 했다.
이러한 점들을 유념하면서 코드를 작성하면, 배열 인덱스 문제와 변수 타입 문제를 피할 수 있다.
'코딩 > 오류 노트' 카테고리의 다른 글
이클립스 설정파일 수정 (0) | 2024.07.12 |
---|---|
코딩테스트 입문 > 분수의 덧셈 (0) | 2024.05.25 |
[23주 5일차] split 사용! 근데 문제 생김! 공백이 첫번째 값으로 취급되어 버리네...? (0) | 2024.03.15 |
[23주 5일차] postmapping db 저장안됨 (1) | 2024.03.15 |
[AJAX] 라디오버튼 값에 따른 출력값 변경 (0) | 2024.03.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday