일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- java기본자료형
- 작은수제거하기
- java map 저장
- 프로그래머스
- java최솟값구하기
- java list 출력
- java set 저장
- 비전공자sqld
- sqld자격증합격
- java 자료구조 활용
- javaJRE
- java list 저장
- 컴파일
- 격파르타합격후기
- 격파르타장점
- java알고리즘
- 프로그래머스제일작은수
- 항해99후기
- java참조자료형
- 항해15기
- java set 출력
- java map
- 격파르타후기
- 인터프린터언어
- java알고리즘문제풀이
- javaJVM
- 격파르타비전공자
- java map 출력
- 코딩부트캠프후기
- 노베이스부트캠프
- Today
- Total
코딩과 결혼합니다
230621 - 프로그래머스 제일 작은 수 제거하기/ 오류와 해결과정 본문
어제부터 계속해서 풀리지 않던 문제가 있었다.
그것은 바로!
제일 작은 수 제거하기
풀이
int[] arr = {4,3,2,1};
int num = arr[0];
int a = arr.length;
//요소가 1개일때
if (arr.length == 1){
return new int[]{-1};
}
int[] arr = {4,3,2,1) 을 예시로 코드가 어떻게 진행되는지 설명해보겠다.
1. 먼저 num이라는 int형 변수를 선언하고 arr의 아무 숫자나 넣어준다. 나는 가장 첫번째 요소를 넣어주었다. //4
2. 이 문제에서는 배열의 요소가 딱 한 개인 경우도 있는데 그때는 -1이 라는 결과값을 내어주라 했으므로, if 문으로
그 경우를 먼저 걸러내준다.
//최솟값 구하기
for (int i = 0; i < a; i++) {
if (num > arr[i]){
num = arr[i];
}
}
3. 최솟값은 arr[i] 가 num보다 작았을때, 그 arr[i]의 요소가 num이 되도록 해주었다. //최솟값 = 1
//최솟값 없는 배열 만들기
int[] newArr = new int[a-1];
for (int i = 0; i < a-1; i++) {
if (arr[i] != num) {
newArr[i] = arr[i];
}
}
4.
오류 : for (int i = 0; i < a-1; i++)
이유 : a-1을 하면 arr의 요소를 다 돌지 않고 끝낸다.
해석 : arr이 4,3,2,1 일때는 1이 마지막 인덱스에 위치해 있어서 언뜻 보면 가능해 보이지만 1의 위치가 다른 곳 (4,1,2,3 이라고 해보자)에 있다면 (arr[i] != num)의 조건을 충족하고도 마지막 요소까지 비교해보지 못하고 끝난다. 그리고 newArr의 요소는 {4,0,2}가 된다.
해결 : for (int i = 0; i < a; i++)
5. i < a 로 바꾸어 주었는데 런타임에러로 실패!!
오류 : Index 3 out of bounds for length 3
이유 : "인덱스 3이 길이 3에 대한 경계를 벗어남" 이라고 한다.
해석 : 위와 마찬가지로 arr이 4,1,2,3일때 newArr에는 {4,0,2}가 저장되는데, 마지막 요소 3이 조건을 충족하고 있기 때문에 문제가 발생한다. 3은 newArr에 들어가려 하지만 index의 길이가 짧아서 들어가지 못하고 오류가 난다.
해결 : count
//count
int count = 0;
int[] newArr = new int[a-1];
for (int i = 0; i < a; i++) {
if (arr[i] != num) {
newArr[count] = arr[i];
count++;
}
}
return newArr;
}
6. int count를 0으로 초기화 해준다.
7. if문의 조건을 만족하면 처음에는 newArr[0] = arr[0] 으로 4가 입력되고, 다음 arr의 요소 3과 2도 조건을 만족하므로 newArr 안에 저장이 된다. 하지만 1일 때는 조건을 충족하지 않으므로 count 되지 못하고 밖으로 빠져나간다. 이렇게 하면 count는 조건을 충족하는 것들만 세어주게 되므로 최솟값이 어느 위치에 있든 영향을 주지 못하게 된다.
'2세 > 기타' 카테고리의 다른 글
230626 - 웹 서버의 동작 원리 (0) | 2023.06.26 |
---|---|
(WIL) 230626 - HTTP, MVC 패턴 (0) | 2023.06.26 |
230620 - 알고리즘 문제를 풀며 (0) | 2023.06.20 |
230616 - 프로그래머스 알고리즘 문제 풀기 (1) | 2023.06.16 |
230615 - 자료구조 요리 레시피 메모장 만들기 (2) | 2023.06.15 |