0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
// 처음 푼 풀이 function solution(numbers) { var answer = 0; console.log(numbers); for(let i = 0; i<10; i++){ if(!numbers.includes(i)) answer += i; } return answer; } solution([1,2,3,4,6,7,8,0]);
왜 별안간 가운데 정렬이 되는지...
numbers.reduce((cur,acc)=> console.log(cur,acc))
// 1 2
undefined 3
undefined 4
undefined 6
undefined 7
undefined 8
undefined 0
reduce가 아직 어려워서, 무조건 괄호 하나 더 쓰고 그 안에 cur, acc 를 담고 콘솔에 출력해보는 식으로 하고 있다.
answer = numbers.reduce((cur,acc)=> cur + acc);
console.log(answer); // 31
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다. (MDN)
cur - 누적값
acc - 현재값
cur에 acc를 차곡차곡 더한다는 뜻(있는 원소들의 합)
뒤에 초기값으로 0을 줘도 된다.
여기까지는 어찌저찌 생각했을 지 몰라도! 45에서 이 값을 빼는 건 생각 못 했을 것 같다...
function solution(numbers) {
var answer = 0;
answer = numbers.reduce((cur,acc)=> cur + acc)
return 45-answer;
}
solution([1,2,3,4,6,7,8,0]); // 14
answer를 선언하지 않고 바로 return 45 - numbers.reduce((cur,acc)=> cur + acc) 라고 해도 된다! 한 줄로 줄이기 가능
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
그래도 알고리즘 푸는 이 시간이 뭔가 제일 행복해
arr의 첫번째 원소를 비교인자로 두고 순서대로 비교하면서 작은 값을 com에 담는다.
// 의식의 흐름대로 적은 풀이과정
function solution(arr) {
var answer = [];
// sort 해서 제일 뒤에 꺼 제거 해도 될 것 같고
// 근데 그럼 원래 배열 순서대로 어떻게 돌려놔?
// 제일 작은 애 인덱스를 찾아서 제거하는게 좋을지도
let com = arr[0];
console.log(com)
for(let i = 0; i < arr.length; ++i) {
if(com > arr[i]) com = arr[i]
arr.pop(i);
console.log(arr)
// 그럼 com의 인덱스는 어케 찾아? 'ㅅ'..
answer = arr.indexOf(arr[i]);
//뭔가 너무 돌아가는 것 같아ㅠㅠ 인덱스를 받고 그걸로 제거
arr.splice(answer, 1);
// 게다가 안됐어... 그냥 찾아서 그 인덱스를 pop
console.log(arr)
}
}
solution([4,2,3,1])
// 제출한 코드
function solution(arr) {
if(!arr || arr[0]===10) return [-1]; // 여기 문제 잘못이해..ㅎㅎ
var answer = [];
let com = arr[0];
for(let i = 0; i < arr.length; ++i) {
if(com > arr[i]) com = arr[i]
}
answer = arr.filter(function(el) { return el > com });
return answer;
}
filter 아직 낯설,,,
그리고 너무 복잡하게 푼 것 같아, 문제 처리 시간?도 3초인가로 오래걸렸다.
+++ 이거 완전 문제를 잘못이해했다. 10 하나가 들어가면 자기 자신이 제거 되니까 빈배열이 됐을 때 -1을 리턴하라는건데ㅠㅠ 왜 10한테만 그러나 했네
마지막에 빈 배열인지 아닌지 확인하고 리턴하면 될 것 같아. (arr.length)
처음부터 하나 들어왔을 때 [-1] 리턴은 안되나....?? 근데 문제에서 리턴하려는 배열이 빈 배열인 경우라고 명시되어 있으니까 마지막에 검증하고 보내는 게 나을 것 같다. 혹시 몰라...
// 다른 사람 풀이
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)),1);
if(arr.length<1)return[-1];
return arr;
}
start
배열의 변경을 시작할 인덱스입니다. 배열의 길이보다 큰 값이라면 실제 시작 인덱스는 배열의 길이로 설정됩니다. 음수인 경우 배열의 끝에서부터 요소를 세어나갑니다(원점 -1, 즉 -n이면 요소 끝의 n번째 요소를 가리키며 array.length - n번째 인덱스와 같음). 값의 절대값이 배열의 길이 보다 큰 경우 0으로 설정됩니다.
delete
Count Optional배열에서 제거할 요소의 수입니다.deleteCount를 생략하거나 값이 array.length - start보다 크면 start부터의 모든 요소를 제거합니다.deleteCount가 0 이하라면 어떤 요소도 제거하지 않습니다. 이 때는 최소한 하나의 새로운 요소를 지정해야 합니다.
(출처: MDN)
제일 작은 값을 찾을 때는 배열의 제일 앞 숫자를 기준으로 잡는다. (ex. min = 0으로 잡으면 0보다 작은 애가 없으면...? 비교 못하잖아)
let min = arr[0];
for(let i = 1; i < arr.length; i++) {
if(arr[i] < min _ {
min = arr[i];
}
}
// 이때는 for문을 돌릴 때 i = 1 부터 시작([0]은 이미 비교했기 때문)
// 배열에서 Math.min 쓰기 - 스프레드 연산자 쓰기
arr = [1, 2, 3, 4];
Math.min(arr) // NaN
Math.min(...arr) // 1
// 버블 정렬
function bubbleSort(array) {
for (let i =0; i< array.length; ++i) {
for(let j = 0; j < array.length-i-1; ++j) {
if(array[j]>array[j+1]) {
[array[j], array[j+1]] = [array[j+1],array[j]];
}
}
}
return array;
}
console.log(bubbleSort([5, 4, 2, 1, 3]));
function bubbleSort(array, type) {
function HoF(a, b) {
return a > b ? true : false;
}
for (let i =0; i< array.length; ++i) {
for(let j = 0; j < array.length-i-1; ++j) {
if(type ? array[j] > array[j+1] : array[j+1] > array[j]) { if(HoF(array[j], array[j+1]))
[array[j], array[j+1]] = [array[j+1],array[j]];
}
}
}
return array;
}
이러라고 HoF를 준 건 아닌 것 같은데.. 어떻게 하는거지 ㅠㅠ
버블 정렬할 때 제일 큰 값은 i가 0일때, 즉 1회차때 맨 오른쪽으로 가게 되어있으므로(정렬 되므로), 이는 한 회차 돌 때마다 반복되므로 j의 조건문의 array.length에서 -i를 해준다. -1은 왜 하는거지?
'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글
220602 프론트엔드 부트캠프 23일차 : 이미지 프로세스, ref (0) | 2022.06.03 |
---|---|
220601 프론트엔드 부트캠프 22일차 : CORS, API, firebase (0) | 2022.06.03 |
220531 프론트엔드 부트캠프 21일차 : [Backend]Open-API, DB / 태그 (0) | 2022.05.31 |
알고리즘 - reduce (0) | 2022.05.31 |
220530 프론트엔드 부트캠프 20일차 : 클래스 컴포넌트, 생명주기(Lifecycle) (0) | 2022.05.31 |