[프로그래머스]Algorithm_23.03.28

윤성해·2023년 3월 28일
0

알고리즘

목록 보기
10/22
post-thumbnail

💡 reduce, Array.isArray, new Set(),forEach, arr.sort()

내적

문제

레퍼런스

두 배열의 길이가 같으므로, 하나의 인덱스 값으로 접근이 가능하다.

1.

function solution(a, b) {
    let answer = 0;
    
    for(let i = 0; i < a.length; i++){ // a,b뭐 넣든 상관없음 길이가 같으니까.
        answer += a[i] * b[i]; 
    }
    return answer
}

2. reduce 메서드 사용

function solution(a, b) {
    return a.reduce((acc,cur, i)=>{
        console.log(acc,cur,i,b[i])
        return acc + (cur * b[i]) 
    }, 0)
}

//acc는 누적값 , cur은 각각의 원소값
//reduce는 배열이 필요하다.
//3번째 인자 i 는 인덱스값을 의미한다.
//a배열의 인덱스로 b에 접근. (길이가 같으니까 가능)
//현재 누적값 + b 배열의 index값 

1 -3 = -3
2
-1 = -2

  • -3 + -2 = 5
    ........

두 개 뽑아서 더하기

문제


//서로 다른 인덱스값을 뽑아온다.
//

레퍼런스


1.

function solution(numbers) {
    // const answer = [];
    let answer = new Set();
    
    //1. i 인덱스를 첫번째 숫자의 기준
    for (let i = 0; i < numbers.length; i++) {
        //2.두번째 숫자의 기준
        for(let j = 1 + 1; i < numbers.length; i++){
            const sum = numbers[i] + numbers[i]
             // 3. 기존의 배열에 더한 값이 이미 있는지를 검증, 없다면 추가한다.
            // if (!answer.includes(sum) === false){
                // 4. 첫번쨰, 두번째 숫자를 더해서 매열에 넣는다
            // answer.push (numbers[i]+numbers[i])
                answer.add(sum)
            // }   
        }
    }
    answer = Array.from(answer);
    for (let i = 0; i <answer.length;i++){
        for(letj = i+ 1; j <answer.length;j++){
            if (answer[i]>answer[j]){
                const temp = answer[j]
                answer j = answer [i];
                answer = temp;
            }
     }
}
return answer
}

2. sort

function solution(numbers) {
   let answer = new Set();
    
    numbers.forEach((num1,i)=>{
        numbers.slice(i+1).forEach(num2 =>{
                answer.add(num1+num2);
        })
    }) //오름차순형태로 정렬
  return  [...answer].sort((a,b)=> {return a-b});
}

배열메서드 sort
arr.sort()->배열메서드, 자동정렬 그냥사용하면 첫번째 자리수만 비교한다. 그래서 2 vs 100 하면 100 이 더 작다고 나온다. 반복문이다. 음수값이면 앞으로, 양수값이면 뒤로 보내는 것이 sort!

arr.sort((a,b) => {
return a - b;
} )

그렇다면 내림차순은? b-a 하면 된다. 작은값이 맨 뒤로 감!

numbers.forEach->numbers가 5면 5찍어준다.


// const arr = new Set();
// const originArr = [];

// // originArr.push(1)
// // originArr

// arr.add("a");
// // arr.forEach(el => {
// // console.log(el)
// // })

// //set을 배열로 바꿔보자 from은 들어오는 인자값을 배열로 바꿈
// // Array.from( arr ).filter() / .reduce()
// //배열을 푸는 스프레도 연산자
// console.log([...arr])

// originArr.push(1)
// originArr

// arr.add("a")

// typeof {}

// const data = []
// Array.isArray(new Set())

//new 뒤에 붙어오는 데이터롤 새로운 객체로 가져온다.

const arr = [3,5,6,4,2,7]
for (let i = 0; i<arr.length;i++){
for(let j = i+1; j<arr.length; j++){
const temp = arr[j]
if (arr[i]>arr[j]){ //오름차순 ->부등호바꾸면 내림차수
arr[j] = arr[i];
arr[i] = temp;
}
console.log(arr,i,j)
}
}

//첫번째숫자가 두번째보다 클경우 자리바꾼다.

profile
Slow and steady wins the race.

0개의 댓글