
* 문제 풀이
class Solution {
public int[] solution(int n, int[] numlist) {
// 1. n의 배수 개수를 계산
int count = 0;
for(int i = 0; i < numlist.length; i++){
if(numlist[i] % n == 0){
count++;
}
}
// 2. n의 배수를 저장할 배열 생성
int[] answer = new int[count];
int index = 0; // answer 배열의 현재 위치를 나타내는 변수
//3. n의 배수를 answer 배열에 저장
for(int i = 0; i < numlist.length; i++){
if(numlist[i] % n ==0){
answer[index] = numlist[i];
index++; // 다음 위치로 이동
}
}
return answer;
}
}
1. n의 배수 개수를 계산
for문을 통해 numlist 배열의 모든 요소 확인
if 조건을 통해 numlist[i]가 n의 배수인지 확인
n의 배수라면 count를 1씩 증가시킴
2. n의 배수를 저장할 배열 생성
count 값으로 정확한 크기의 배열 생성.
answer 배열에 값을 넣을 위치를 따로 관리하는 index 변수를 선언.
=> 왜? 배열의 인덱스를 순서대로 써야하기 때문에
answer[i] = numlist[i]; i 값 그대로 인덱스로 사용하면 배수가 아닌 숫자들의 경우 배열 범위를 벗어나거나 빈 공간이 생긴다.
예) int[] numlist = {4, 5, 6, 7, 8, 9, 10, 11, 12}; / n = 3
=> 3의 배수는 6, 9, 12 총 3개. answer 배열의 크기는 3이므로 answer[0], answer[1], answer[2]까지 존재
answer[i] = numlist[i]; 코드를 사용할 경우,
i = 0 / numlist[i] = 4 ~> 4 % 3 != 0 answer[0]에 대입 불가능
i = 1 / numlist[i] = 5 ~> 5 % 3 != 0 answer[1]에 대입 불가능
i = 2 / numlist[i] = 6 ~> 6 % 3 == 0 answer[2] = 6
그러나 이 이후부터 배열 초과하므로 에러 발생!
3. n의 배수를 answer 배열에 저장
for 문으로 numlist 배열의 모든 요소를 돈다.
if 조건을 통해 n의 배수 확인하고 index에 저장

* 다른 풀이
class Solution {
public int[] solution(int n, int[] numlist) {
int count = 0;
for (int num : numlist) {
if (num % n == 0) {
count++;
}
}
int[] answer = new int[count];
int index = 0;
for (int num : numlist) {
if (num % n == 0) {
answer[index++] = num;
}
}
return answer;
}
}
'코테 > 프로그래머스 JAVA Lv.0' 카테고리의 다른 글
| [프로그래머스/java/Lv.0] 모음 제거 (0) | 2024.11.28 |
|---|---|
| [프로그래머스/java/Lv.0] 뒤에서 5등까지 (0) | 2024.11.26 |
| [프로그래머스/java/Lv.0] 정수 부분 (0) | 2024.11.22 |
| [프로그래머스/java/Lv.0] 문자열 정수의 합 (0) | 2024.11.21 |
| [프로그래머스/java/Lv.0] 문자 반복 출력하기 (1) | 2024.11.20 |