4주차 알고리즘 테스트

majungha·2023년 4월 7일
1

알고리즘

목록 보기
20/71

오늘의 알고리즘 테스트 👍

📝 1. 거스름돈


  • 현금만을 사용하는 매점의 점원인 당신은 현재 매장에 동전 밖에 남지 않은 것을 확인했습니다.

  • 손님들이 몰려오고 있고, 당신은 각각의 손님에게 최소 개수의 동전만을 사용해 거스름돈을 전달해야합니다.

  • 현재 가지고 있는 동전은 1원, 5원, 10원, 50원, 100원, 500원, 이상 여섯개 종류가 있습니다.

  • 인자로 받는 change는 거슬러주어야 하는 액수입니다.

  • 최소 개수의 동전을 사용해 주어진 change와 같은 값을 만들고 사용된 동전의 개수를 리턴해주세요.

  • 예를 들어 change가 4600원이라면, 500원짜리 9개, 100원짜리 1개, 최소 10개로 완성되기 때문에 숫자 10을 리턴합니다.

▷ 입출력 예

makeChange(4350) // 12
makeChange(2000) // 4

▷ 내 풀이

▷ 해결 못함 ❌

function makeChange(change) {
  // 여기에서 작업하세요.
  count = 0
  if(change > 500){
    count ++
    change = change - 500
    } else if(change > 100){
          count++
          change = change - 100
    } else if(change > 50){
            count++
            change = change - 50
    } else if(change > 10){
              count++
              change = change - 10
    } else if(change > 5){
        count++
        change = change - 5
    } else if(change > 1){
        count++
        change = change - 1
    } 
  return count
}
  • while문을 쓰려다가 쓰는 법을 모르겠어서 결국 해결하지 못하였다..

▷ forEach 매서드 사용 풀이

function makeChange(change) {
  let result = 0;
  const coins = [500, 100, 50, 10, 5, 1];
  coins.forEach((e) => {
    if (change > 0) {
      const coin = Math.floor(change / e);
      change -= e * coin;
      result += coin;
    }
  });
  return result;
}

▷ while문 사용 풀이

function makeChange(change) {
  let i = 0;
  let countCoin = 0;
  const coin = [500, 100, 50, 10, 5, 1];
  while (change !== 0) {
    const rest = change / coin[i];
    const quotient = Math.floor(rest);
    countCoin += quotient;
    change -= coin[i] * quotient;
    i++;
  }
  return countCoin;
}

📝 2. 짧은 단어 찾기


  • 다양한 속성의 요소가 담긴 배열이 주어집니다.
  • 배열 내의 요소 중에서 가장 짧은 문자열을 찾아 리턴해야합니다.

▷ 입출력 예

shortestWord([ [1], 'codecamp', true, 'code' ]) // 'code'

▷ 내 풀이

function shortestWord(arr) {
    // 여기에서 작업하세요.
     let arr1 = []
     let arr2 = []
     let answer = ''
     for(let i = 0; i < arr.length; i++){
       if(typeof(arr[i]) === 'string') {
         arr1.push(arr[i])
       }
     }
     for(let i = 0; i < arr1.length; i++){
         arr2.push(arr1[i].length)
     }
     const min = Math.min(...arr2) // 4
     for(let i = 0; i < arr1.length; i++){
        answer += (min === arr1[i].length ? arr1[i] : '')
     }
     return answer
}

▷ filter 매서드 사용 풀이

function shortestWord(arr) {
  // 여기에서 작업하세요.
  const strArr = arr.filter((e) => {
    return typeof e === 'string';
  });
  let answer = strArr[0];
  for (let i = 1; i < strArr.length; i++) {
    if (answer.length > strArr[i].length) {
      answer = strArr[i];
    }
  }
  return answer;
}

▷ reduce 매서드 사용 풀이

function shortestWord(arr) {
  // 여기에서 작업하세요.
  return arr.reduce((a, b) => {
    if (typeof a === 'string' && typeof b === 'string') {
      return a.length <= b.length ? a : b;
    } else if (typeof a === 'string') {
      return a;
    }
    return b;
  });
}

📝 3. 세 수 정렬

  • 숫자 세 개가 담겨있는 배열 arr이 주어졌을 때,
  • 가장 작은 수, 그 다음 수, 가장 큰 수로 오름차순 정렬한 배열을 리턴하세요.
  • 단) 배열에 담긴 숫자는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 이 숫자는 모두 다르다.

▷ 입출력 예시

sortNum([ 2, 3, 1 ]) // [ 1, 2, 3 ]
sortNum([ 400, 501, 23 ]) // [ 23, 400, 501 ]

▷ 내 풀이

function sortNum(arr) {
  // 여기에서 작업하세요.
  return arr.sort((a, b) => a - b);
}

▷ bubble sort 사용 풀이

function sortNum(arr) {
  // 여기에서 작업하세요.

  // 거품정렬(bubble sort) 알고리즘
  let temp = 0;
  for (let i = 0; i < arr.length; i++) {
    for (let j = 1; j < arr.length - i; j++) {
      if (arr[j - 1] > arr[j]) {
        temp = arr[j - 1];
        arr[j - 1] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}

📝 4. 문자열 패턴

  • 문자열 pattern과 str이 주어집니다.
  • 두 문자열이 입력된 패턴이 완전히 같은지 확인한 뒤,
  • 같은 패턴일 경우 true를,
  • 패턴이 다를 경우 false를 리턴해주세요.

▷ 입출력 예시

▷ 해결 못함 ❌

stringPattern('abba', 'dog cat cat dog') // true
stringPattern('abcaba', 'cup ice coffee cup ice coffee') // false
stringPattern('abbab', 'a b b a b a b b a b') // false

▷ for문 사용 풀이

function stringPattern(pattern, str) {
  // 여기에서 작업하세요.
  str = str.split(' ');
  if (pattern.length !== str.length) return false;
  const obj = {};
  for (let i = 0; i < str.length; i++) {
    if (obj[pattern[i]] === undefined) obj[pattern[i]] = str[i];
    else if (obj[pattern[i]] !== str[i]) return false;
  }
  return true;
}

▷ forEach 매서드 사용 풀이

function stringPattern(pattern, str) {
  // 여기에서 작업하세요.
  if (pattern.length !== str.length) return false;
  str = str.split(' ');
  let answer = true;
  const hashed = {};
  str.forEach((el, i) => {
    if (hashed[el] === undefined) hashed[el] = pattern[i];
    else if (hashed[el] !== pattern[i]) answer = false;
  });
  return answer;
}

출처: 코드캠프

profile
개발자 블로그 / 항상 겸손한 자세로 배우면서 성장하자 할 수 있다!

0개의 댓글