문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
제한사항
arr은 자연수를 담은 배열입니다.
정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
divisor는 자연수입니다.
array는 길이 1 이상인 배열입니다.
입출력 예
arr divisor return
[5, 9, 7, 10] 5 [5, 10][2, 36, 1, 3] 1 [1, 2, 3, 36][3,2,6] 10 [-1]
입출력 예#1
arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.
입출력 예#2
arr의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.
입출력 예#3
3, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.
반복문으로 arr[i]를 divisor로 나누었을때 나머지가 0되는 answer를 찾는다. -> 오름차순 정렬한다 -> 조건에 안맞으면 [-1]만 반환한다.
👉 1트 풀이
function solution(arr, divisor) {
var answer = [];
for(i=0; i<arr.length; i++) {
if(arr[i] % divisor == 0) {
answer.push(arr[i]);
}if(arr[i] % divisor != 0) {
answer = [-1]}
}
return answer.sort();
}
예시 1번에서 정렬이 맞지 않는 답이 나왔다. sort()를 쓸 때에는 정렬 기준을 주어야 오름차순 배열로 잘 나올 수 있게된다.
👉 2트 풀이
function solution(arr, divisor) {
var answer = [];
for(i=0; i<arr.length; i++) {
if( arr[i] % divisor == 0 ) {
answer.push(arr[i]);
}
}
if(answer.length > 0) {
return answer.sort(function(a,b) {
a-b;
});
}else{return [-1]}
}
정렬 기준도 주고, 반복문도 수정했다. arr에서 조건에 맞는 arr[i]만 answer에 추가하고 반복문을 빠져나온다. 조건에 맞는 경우가 하나도 없으면 answer는 그대로 빈 배열이므로 [-1]만 나오게 수정했다. 그런데 이번에는 잘 나오던 예시2번 답이 오답으로 나왔음
👉 제출 풀이
sort문을 좀 더 수정해서 마지막 답안 작성!
➕ ➕ plus
숫자형 배열에서 오름차순으로 정렬하는 방법
: Array.prototype.sort() 메서드 사용
예를들어,
var numbers = [5, 2, 9, 1, 5, 6];
배열 number를 오름차순 정렬하려면 배열을 정렬하는 sort 메서드에 정렬 기준을 주어야함(sort는 기본적으로 문자열을 간주하여 사전식 정렬하기 때문에 숫자형을 비교할 때는 a,b라는 비교인자를 써야함)
▪️ a - b를 반환하면 오름차순으로 정렬
▪️ b - a를 반환하면 내림차순으로 정렬
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
-> 위의 결과로 [1, 2, 5, 5, 6, 9]이 나오게된다.
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
제한사항
absolutes의 길이는 1 이상 1,000 이하입니다.
absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
signs의 길이는 absolutes의 길이와 같습니다.
signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
입출력 예
absolutes signs result
[4,7,12][true,false,true] 9
[1,2,3][false,false,true] 0
입출력 예 #1
signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
따라서 세 수의 합인 9를 return 해야 합니다.
입출력 예 #2
signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
따라서 세 수의 합인 0을 return 해야 합니다.
signs 요소가 true이면 absolutes 요소에 +를 주고, false이면 -를 준다 -> signs의 요소를 순서대로 판단해야하므로 반복문을 쓴다 -> signs의 인덱스번호 0번부터 true, false를 판단해서 absolutes의 인덱스 0번째 숫자에 기호를 부여하려면???
➕ ➕ plus
JavaScript에서 배열의 특정 인덱스의 요소에 접근하여 값을 변경하는 방법?
예를들어 배열의 0번째 인덱스 요소에 -를 주는 방법
-> array[0] = -array[0];
👉 문제 풀이
1트 오답
if(signs[i]) == "true") `불린값 비교에 == "true"같은 식은 불필요함!`
absolutes[i] = + absolutes[i];
answer += absolutes[i]
}else{absolutes[i] = - absolutes[i];
answer += absolutes[i]}
}
boolean 값?
1. Boolean 자료형 : true와 false
2. Boolean 연산 : 논리 연산자 &&, ||, !
&& (논리 AND): 모든 조건이 참일 때 true를 반환
|| (논리 OR): 하나 이상의 조건이 참일 때 true를 반환
! (논리 NOT): 조건을 부정
ex)

3. Boolean 비교(일치/불일치 비교) :
▪️ 단순 비교: if (booleanVariable)과 같이 변수 자체를 조건으로 사용
이는 변수가 true인 경우에만 조건 충족
▪️ 엄격한 비교: if (booleanVariable === true)와 같이 === 연산자를 사용하여 변수가 정확히 true인지 확인(값 비교 + 데이터 형식 비교)
▪️ 부정 비교: if (!booleanVariable)과 같이 ! 연산자를 사용하여 변수가 false인지 확인

수정한 것)
for (var i = 0; i < signs.length; i++) {
if (signs[i]) {
absolutes[i] = +absolutes[i]; // signs[i]가 true일 때는 absolutes[i]를 양수로 변환하고, 그 값을 answer에 더한다
answer += absolutes[i];
} else {
absolutes[i] = -absolutes[i]; // signs[i]가 false일 때는 absolutes[i]를 음수로 변환하고, 그 값을 answer에 더한다
answer += absolutes[i];
}
}
제출 답안)
