배열 numlist
가 주어지고 구해야 하는 배수 n
도 주어진다.
이때 n
의 배수만 담긴 result
라는 배열을 반환 해줘야 한다.
그래서 나는 result
의 배열 길이를 구하기 위해 int m
을 지정 해줬다.
아래 코드에 주석을 남겨뒀으니 코드로 살펴보자
int n = 3; // n의 배수
int[] numlist = {4, 5, 6, 7, 8, 9, 10, 11, 12};
int m = 0; // 되돌려줄 배열 길이 알아야 함.
for (int i = 0; i < numlist.length; i++) {
if (numlist[i] % n == 0) {
numlist[m] = numlist[i]; // n의 배수로 numlist 0부터 m-1번째 인덱스 값 변경
m++; // m 크기 늘리기
}
}
int[] answer = new int[m]; // 결정된 m의 크기로 배열 생성
for (int i = 0; i < m; i++) {
answer[i] = numlist[i]; // 배열에 값 집어넣기
}
for
를 두개나 써서 풀었다. answer
에 값을 넣으려고 했지만 m이 확정되지 않아서 바로 넣을 수 없었다...
int n = 3; // n의 배수
int[] numlist = {4, 5, 6, 7, 8, 9, 10, 11, 12};
int m = 0; // 되돌려줄 배열 길이 알아야 함.
int[] answer = new int[m];
for (int i = 0; i < numlist.length; i++) {
if (numlist[i] % n == 0) {
answer[m] = numlist[i];
m++;
}
}
원래는 이렇게 코드를 짯으나 index 에러로 실패..! 그래서 int[] answer
를 m이 다 결정난 이후로 내려준거다..
이렇게 제출을 하고 나니
아!!!!! 배열 길이도 정해졌고 numlist
에 값을 담아뒀잖아?!?!
라는 생각이 들었다.
위와 똑같은 코드에서 for
를 하나 덜 사용했다.
바로 Arrays
의 copyOfRange
를 사용하는것
int n = 3; // n의 배수
int[] numlist = {4, 5, 6, 7, 8, 9, 10, 11, 12};
int m = 0; // 되돌려줄 배열 길이 알아야 함.
for (int i = 0; i < numlist.length; i++) {
if (numlist[i] % n == 0) {
numlist[m] = numlist[i]; // n의 배수로 numlist 0부터 m-1번째 인덱스 값 변경
m++; // m 크기 늘리기
}
}
int[] answer = Arrays.copyOfRange(numlist, 0, m);
많이 짧아지긴 했으나 위에 for 문은 여전히 사용된다..
아직 내 지식으로는 위의 for문도 간단하게 바꾸는걸 모르겠다..
여튼 중요한 건 배열을 배열로 옮길 때 copyOfRange
를 사용하는 방법도 있다~~~ 이말이야.
일단 간단하게 문제를 풀어보고 더 효율적인 코드가 있는지 항상 생각하는 힘을 기르자.
알고는 있는데 못써먹고 지나갔다가 아차!! 하고 생각나는 경우가 많다.
그래도 아차!! 하고 생각났으니 괜찮다고 본다.
아예 모르고 지나가는 것 보다는 낫지