프로그래머스 문제풀이 6

zitto·2023년 4월 1일
0

Algorithms

목록 보기
6/22
post-thumbnail

1.내적

문제 설명
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]b[0] + a[1]b[1] + ... + a[n-1]b[n-1] 입니다. (n은 a, b의 길이)

제한 조건
a, b의 길이는 1 이상 1,000 이하입니다.
a, b의 모든 수는 -1,000 이상 1,000 이하입니다.


입출력 예
a / b / result
[1,2,3,4][-3,-1,0,2] 3
[-1,0,1][1,0,-1] -2

입출력 예
입출력 예 #1
a와 b의 내적은 1
(-3) + 2(-1) + 30 + 42 = 3 입니다.
입출력 예 #2
a와 b의 내적은 (-1)
1 + 00 + 1(-1) = -2 입니다.


문제풀이

function solution(a, b) {
    let answer = 0;
    for(let i = 0; i <a.length;i++){
        answer += a[i] * b[i]
         // console.log(answer,a[i],b[i])
    }
    return answer;
    // console.log(a,b);
}

접근방법
1. 각 배열의 인덱스에 위치한 값들의 곱을 더해야 한다.
2. 초기값으로 0을 두고 a와 b가 무엇을 가지고 오는 지 찍어본다.
3. a의 길이만큼 반복해서 a[i]를 출력해본다.
4. a와 b의 공통점은 길이가 같다. 곧 length가 같다.
5. answer에다가 더해준다.
console.log(i,a[i],b[i])하면
6.
7. reduce 배열 메서드 활용하기

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

2. 두 개 뽑아서 더하기

문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.


제한 조건
numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.


입출력 예
numbers / result
[2,1,3,4,1][2,3,4,5,6,7]
[5,0,2,7][2,5,7,9,12]

문제풀이

function solution(numbers) {
    const answer = [];
    //1. i인덱스를 첫번째 숫자의 기준
    for(let i=0;i<numbers.length;i++){
        //2. l인덱스를 두번째 숫자의 기준
        for(let l = i + 1; l<numbers.length;l++){
            console.log(answer,numbers[i]+numbers[l])
            //3. 첫번째 숫자와 두번재 숫자를 더해서 배열에 넣는다.
            answer.push(numbers[i] + numbers[l])
        }
    }
     console.log(answer)
}

접근방법
1. 서로 다른 숫자를 가져와야 함.
2. 첫번째 기준점이 되는 첫번째 숫자를 구해온다.
3. 반복문을 돌려서 0번째 부터 마지막인덱스까지가 첫번째 숫자의 기준이 된다.
4. 이중반복문 : 두번째 포문이 끝나야 바깥의 포문이 끝나는 것임.
5. 서로다른 인덱스값을 가져온다.
6. 중복되는 숫자까지 제거한다.
7. 자료구조문법에서 배열과 동일한 기능을 하는
new Set() -> 최근에 나온 문법
형태는 배열이지만 객체임!
배열처럼 사용하지만 배열은 아님
8.진짜 배열인지 검사하는 것 Array.isArray데이터가 중복된다면 중복되는 데이터를 제거해줌.
8. new Set에서는 reduce, filter 를 사용할 수 없다.
순수배열이 아니기 때문에!
9. 배열메소드로 바궈서 사용행야 한다.
10. 배열풀어주는 연산자 ...arr
11.new Set을 배열로 바꿔준다.

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

11.오름차순정렬하는 법
현재인덱스위치의 값이 그 뒤의 인덱스위치의 값보다 작으면 앞으로 보내준다.
sort 배열메소드

arr.sort((a,b)=>{
  console.log(a - b);
  // return a - b
return b - a 
  // console.log(a,b)
})
profile
JUST DO WHATEVER

0개의 댓글