[처음 푼 풀이]
function solution(arr, divisor) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] % divisor === 0) {
newArr.push(arr[i]);
newArr.sort();
}
else {
newArr.push(-1);
}
}
return newArr;
}
1. 새로운 배열을 받아줄 newArr 변수를 설정함.
2. for문을 돌려서 arr[i]가 divisor로 나눠진다면, newArr에 push를 해 값을 배열에 넣어줌.
3. 그리고 그 값들을 sort를 이용해 오름차순으로 정렬해줌.
4. 만약 divisor로 나누어 떨어지지 않으면 newArr에 -1을 push함.
그런데, 여기서 첫번째 예시가 통과되지 못함.
리턴값이 계속 [10, 5] 가 나왔던 것!
→ 이유: "10" 에서 "1" 이 "5" 보다 작았기 때문
세번째 예시는 [-1, -1, -1]이 리턴됨
→ 이유: [3, 2, 6]이 10으로 나누어지지 않기 때문에 배열 안의 값을 모두 -1로 대체, 따라서 [-1, -1, -1]이 리턴될 것.
[두번째 풀이]
function solution(arr, divisor) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] % divisor === 0) {
newArr.push(arr[i]);
newArr.sort((a, b) => a - b);
}
}
if (newArr.length === 0) {
newArr.push(-1);
}
return newArr;
}
따라서, 단순히 newArr.sort()가 아닌 newArr.sort((a, b) => a - b) 를 해줘야함
그러면 첫번째 예시의 값대로 [5, 10] 이 나오게 됨 (컴퓨터 입장에서 생각할 것!)
또, 단순히 for문 안에서 else { newArr.push(-1) } 해버리면 모든 수를 다 -1 로 바꿔서 넣어버리기 때문에 안됨
그래서 for문 밖에서 newArr 배열의 길이가 0 일때 -1 로 처리하면 되는 것..
newArr 배열 길이가 0 이라는 것은 arr를 divisor로 나눴을 때 어떤 수도 나누어떨어지지 않는다는 의미
[코드 리뷰]
function solution(arr, divisor) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] % divisor === 0) {
newArr.push(arr[i]);
}
}
newArr.sort((a, b) => a - b);
if (newArr.length === 0) {
return [-1]
}
return newArr;
}
1. 먼저 for문에서 arr 안의 값을 divisor로 나눴을 때 나누어떨어지는 수를 배열에 넣고
2. for문 밖에서 newArr를 오름차순 정리하면 됨!
→ 이유 : for문을 돌릴 때마다 sort()를 실행하는 것은 비효율적.
모든 for문을 돌리고 sort()를 한번 실행해도 똑같은 값이 도출됨.
3. return newArr.push(-1) 를 그냥 return [-1] 해도 같은 결과가 나옴
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 콜라츠 추측 (0) | 2022.09.21 |
---|---|
[JS] 예산 (0) | 2022.09.21 |
[JS] 두 정수 사이의 합 (0) | 2022.09.21 |
[JS] 부족한 금액 계산하기 (1) | 2022.09.21 |
[JS] 소수 찾기 (0) | 2022.09.04 |