Javascript 알고리즘 기본문제풀이 1번~8번

Hyodduru ·2022년 1월 29일
0

Algorithm

목록 보기
1/25
post-thumbnail

출처 : 자바스크립트 알고리즘 문제풀이(코딩테스트 대비) - 김태원 인프런

1. 기본 문제풀이

1. 세 수 중 최솟값 구하기

      function solution(a, b, c) {
        let answer;
        //나의 풀이
         if (a < b && a < c) {
           answer = a;
         } else if (b < a && b < c) {
           answer = b;
         } else if (c < a && c < b) {
           answer = c;
         }
  	// 선생님 풀이
        if (a < b) answer = a;
        else answer = b;
        if (c < answer) answer = c;
        return answer;
      }

    console.log(solution(2, 5, 1));

2. 삼각형 판별하기

세 인자 값으로 삼각형을 만들 수 있는 지 판별하기
삼각형이 되는 조건 : 가장 큰 값 < 나머 주 값의 합

  function solution(a, b, c) {
  // 나의 풀이
    let answer, max;
    const total = a + b + c;
    if (a > b) max = a;
    else max = b;
    if (c > max) max = c;

  if (max < total - max) answer = "YES";
  else answer = "NO";

  // 선생님 풀이
  let answer = "YES",
    max;
  let sum = a + b + c;
  if (a > b) max = a;
  else max = b;
  if (c > max) max = c;
  if (sum - max <= max) answer = "NO";

    return answer;
  }
  console.log(solution(6, 7, 11));
  console.log(solution(13, 33, 17));

let 에 미리 YES라는 값을 부여하고 조건에 부합하지 않을 경우 'NO'를 주어 코드를 더 간단하게 만들었다.

3. 연필 갯수

  function solution(n) {
    let answer;
    answer = Math.ceil(n / 12);
    return answer;
  }
  console.log(solution(25));
  console.log(solution(178));

4. 1부터 N까지 합 출력하기

인자값을 받으면 1부터 그 값까지의 합을 출력하기
for loop를 활용하기

function solution(n) {
 //나의 풀이
 let answer = (n * (n + 1)) / 2;
	
 //선생님 풀이
 let answer = 0;
 for(let i =1; i <=n; i++){
     answer += 1;
 }

   return answer;
 }
 console.log(solution(10));
 console.log(solution(6));

5. 최솟값 구하기

여러 숫자들 중 최솟값을 리턴하기

 function solution(arr) {
    //나의 풀이
    let answer = Math.min(...arr);

    //선생님 풀이
   let answer,
     min = Number.MAX_SAFE_INTEGER; //arr[0]
   for (let i = 0; i < arr.length; i++) {
     if (arr[i] < min) min = arr[i];
   }
   answer = min;
   return answer;
 }
 console.log(solution([5, 3, 7, 11, 2, 15, 17]));

추가! ) let answer = Math.min.apply(null, arr); null 꼭 적어줘야함. this 에다가 control 할 수 있는 객체를 넘겨줌

  • Number.MAX_SAFE_INTEGER = 안전한 상수의 최댓값을 제공한다. 최솟값으로 이를 설정함으로써 이 값보다는 무조건 배열내의 숫자들의 값이 적기에 활용할 수 있다.

6. 홀수

배열 내의 숫자들 중 홀수값들만의 합과 홀수값들 중 최솟값을 구하라

function solution(arr) {
    //나의 풀이
    let answer = [];
    let odds = arr.filter((num) => num % 2 === 1);
    let sumOdds = odds.reduce((acc, cur) => (acc += cur), 0);
    let minOdd = Math.min(...odds);
	answer.push(sumOdds, minOdd);
    
    //선생님 풀이
    let answer = [];
    let sum = 0,
      min = Number.MAX_SAFE_INTEGER;
    for (let x of arr) {
       if (x % 2 === 1) {
         sum += x;
         if (x < min) min = x;
       }
     }
     answer.push(sum);
     answer.push(min);
     return answer;
    }

   arr = [12, 77, 38, 41, 53, 92, 85];
   console.log(solution(arr));

7. 10부제

배열 숫자내의 일의 자리 수와 인자 첫번째 값과 일치하는 숫자들의 갯수를 구하라

  function solution(day, arr) {
   // 나의 풀이
   let answer = arr.filter((num) => num % 10 === day).length;
  // 선생님 풀이
  let answer = 0;
  for (let x of arr) {
    if (x % 10 === day) answer++;
  }

   return answer;
  }
 arr = [25, 23, 11, 47, 53, 17, 33];
 console.log(solution(3, arr));
 console.log(solution(0, [12, 20, 54, 30, 87, 91, 30]));

8. 일곱난장이

9개의 숫자들 중 7개의 합이 100이어야 한다. 100이 되지 못하는 두 숫자를 제외한 배열을 return 하라

      function solution(arr) {
       // 나의 풀이
       let answer = [];
       let gap = arr.reduce((acc, cur) => (acc += cur), 0) - 100;

      for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length; j++) {
          if (arr[i] + arr[j] === gap && i > j) {
            answer.push(arr[i], arr[j]);
          }
        }
      }
       // 선생님 풀이
        let answer = arr;
        let sum = arr.reduce((a, b) => a + b, 0);
        for (let i = 0; i < 8; i++) {
          for (let j = i + 1; j < 9; j++) {
            if (sum - (arr[i] + arr[j]) === 100) {
              arr.splice(j, 1);
              arr.splice(i, 1);
            }
          }
        }
        return answer;
      }

      let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
      console.log(solution(arr));

유의 사항) 만약 i부터 splice를 해버리면 index가 앞으로 당겨져서 25가 아닌 그 뒤 8이 지워져버린다.
그렇기에 더 뒤 index인 j 부터 splice 해주어야 한다.
splice는 두번째 인자값으로 삭제하고 싶은 item의 갯수를 받는다. 적어주지 않으면 첫번째 인자값부터 다 삭제되니 유의할 것!

profile
꾸준히 성장하기🦋 https://hyodduru.tistory.com/ 로 블로그 옮겼습니다

0개의 댓글