프로그래머스 | Lv.1_월간 코드 챌린지 시즌 1_JS

김명성·2021년 10월 12일
0

Algorithm

목록 보기
29/61
post-thumbnail

난이도 : Level. 1
언어 : Javascript
출제 내역 : 월간 코드 챌린지 시즌 1

전체 풀이 코드 👈🏻 클릭시 Github로 이동


❓ Question 1

내적

  • 주어진 각 배열간의 곱들의 합을 구하라

📝 My Solution 1

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

a배열과 b배열 각각의 일치하는 인덱스의 값을 곱한 뒤,
그 값들의 합을 구하는 문제였기에, 복잡한 계산은 들어가지 않았습니다.

결과


❓ Question 2

두 개 뽑아서 더하기

  • 숫자가 담긴 배열 중 아무 인덱스의 2개 숫자를 더해서 나온 값을 정렬해서 반환

📝 My Solution 2

function solution(numbers) {
    var answer = [];
        for (let i = 0; i<numbers.length-1; i++) {
            for (let l = i+1; l<numbers.length; l++) {
                let sum = numbers[i] + numbers[l]
                if (answer.indexOf(sum) === -1) {
                    answer.push(sum)
                }
            }
        }
    return answer.sort((a,b)=> a-b);
}

2개의 인덱스끼리 모두 더해주는데,
해당 값이 배열에 없을 때만 그 값을 넣어주고,
마지막엔 배열을 오름차순으로 정렬해서 반환했습니다.

결과


❓ Question 3

3진법 뒤집기

  • 어떤 수를 3진법으로 변환하고 뒤집어서 10진수로 변환한 수 반환

📝 My Solution 3

function solution(n) {
  var answer = 0;
  let newArr = [];
  let result = n;
  let notation = [];
  for (let i = 0; i < n; i++) {
    if (Math.pow(3, i) > n) {
      break;
    } else {
      newArr.push(Math.pow(3, i));
    }
  }

우선 들어오는 수를 제곱수를 이용해서 3진법이 몇자리까지 되는지 확인합니다.

  for (let i = newArr.length - 1; i > -1; i--) {
    if (result - Math.pow(3, i) * 2 >= 0) {
      notation.push(2);
      result = result - Math.pow(3, i) * 2;
    } else if (result - Math.pow(3, i) >= 0) {
      notation.push(1);
      result = result - Math.pow(3, i);
    } else {
      notation.push(0);
    }
  }

그 다음 이번에도 제곱수를 이용해서 해당 수가
3진법으로 어떻게 되는지 확인해 봅니다.

  for (let i = 0; i < notation.length; i++) {
    answer += notation[i] * newArr[i];
  }
  return answer;
}

마지막으로 해당 자리수와 3진법을 서로 곱해줘서
나오는 값을 결과로 내보냅니다.

결과

profile
잠재력은 핵폭탄급 Frontend Developer

0개의 댓글

관련 채용 정보