230322_Algorithm

majungha·2023년 4월 27일
1

알고리즘

목록 보기
7/71

오늘의 알고리즘 👍


❗ sort 매서드


const arr = [1, 9, 22, 333, 62, 2, 4]
  • 순서대로 정렬하고 싶을 때 사용합니다.

  • sort매서드 기본 사용법

arr.sort() // [ 1, 2, 22, 333, 4, 62, 9 ]
  • 콜백함수 넣어서 사용
arr.sort((a, b) => {
     return a - b -> 오름차순 //양수인지 음수인지 확인하고 정렬해줌
     // return b - a -> 내림차순
}) // [ 1, 2, 4, 9, 22, 62, 333 ] 
  • 유니코드 사용해서 정렬
const arr = ['b', 'c', 'a', 'e', 'd']

arr.sort((a, b) => {
  // return a < b ? -1 : 1 // 오름차순
  // return a > b ? -1 : 1 // 내림차순
})

📝 1 .자릿수 더하기


  • 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
  • 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

▷ 내 풀이

function solution(n){
    string = "" + n
    let answer = 0;
    for(let i = 0; i < string.length; i++){
      answer = answer + Number(string[i])
    }
    return answer;
}

▷ String, Number, reduce, split 메서드 사용 풀이

function solution(n) {
  const answer = String(n)
    .split("")
    .reduce((acc, cur) => {
      return acc + Number(cur);
    }, 0);
  return answer;
}

📝 2. x만큼 간격이 있는 n개의 숫자


  • 함수 solution은 정수 x와 자연수 n을 입력 받아,
  • x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다.
  • 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

▷ 내 풀이

function solution(x, n) {
  let answer = [];
  for (let i = 1; i <= n; i++) {
    answer.push(x * i);
  }
  return answer;
}

▷ new Array, fill, map 메서드 사용 풀이

function solution(x, n) {
  let answer = new Array(n).fill(1).map((num, i) => {
    return (num + i) * x;
  });
  return answer;
}

📝 3. 문자열 내림차순으로 배치하기


  • 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
  • s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

▷ 내 풀이

function solution(s) {
  let zzz = [];
  let qqq = "";
  for (let i = 0; i < s.length; i++) {
    zzz.push(s[i]);
  }
  zzz.sort();
  zzz.reverse();
  for (let i = 0; i < s.length; i++) {
    qqq = qqq + zzz[i];
  }
  return qqq;
}

▷ 수업 풀이

function solution(s) {
  const answer = [];
  for (let i = 0; i < s.length; i++) {
    answer.push(s[i]);
  }
  answer.sort((a, b) => {
    return a > b ? -1 : 1;
  });
  return answer.join("");
}

▷ sort, split, join 매서드 사용 풀이

function solution(s) {
  const answer = s
    .split("")
    .sort((a, b) => {
      return a > b ? -1 : 1;
    })
    .join("");
  return answer;
}

📝 4. K번째수


  • 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
  • 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
    1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
    2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
    3. 2에서 나온 배열의 3번째 숫자는 5입니다.
  • 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때,
  • commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

▷ 내 풀이

▷ 해결 못함 ❌

▷ 수업 풀이

function solution(array, commands) {
  const answer = [];
  for (let idx = 0; idx < commands.length; idx++) {
    const i = commands[idx][0];
    const j = commands[idx][1];
    const k = commands[idx][2];
    const result = array.slice(i - 1, j).sort((a, b) => {
      return a - b;
    });
    answer.push(result[k - 1]);
  }
  return answer;
}

▷ slice, map, sort 매서드 사용 풀이

function solution(array, commands) {
  const answer = commands.map((el) => {
    const result = array.slice(el[0] - 1, el[1])
                        .sort((a, b) => a - b);
    return result[el[2] - 1];
  });
  return answer;
}

출처: 프로그래머스
출처: 코드캠프

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

0개의 댓글