[javascript알고리즘] 공주구하기

이아현·2023년 8월 1일
0

코딩테스트

목록 보기
25/31
post-thumbnail

✅ 문제

✅ 접근방법

  • queue에 1번, 2번을 외친 왕자들을 push하고 3번을 외친 왕자는 shift()를 이용하여 삭제하는 방법

👩🏻‍💻 풀이

function solution(prince, number) {
  let answer = 0;
  let queue = Array.from({ length: prince }, (v, i) => i + 1); // 길이가 8이고 1부터 8까지의 왕자를 담은 리스트

  // queue 리스트에 요소가 없을 때까지 while문 돌리기
  // 1번, 2번을 외친 왕자는 다시 queue 리스트에 추가
  // 3번을 외친 왕자는 queue리스트에서 제외
  // queue 리스트의 길이가 1이면 한 명의 왕자가 남았으므로 답이 된다.
  while (queue.length) {
    for (let i = 1; i < number; i++) queue.push(queue.shift());
    queue.shift();
    if (queue.length === 1) answer = queue.shift();
  }

  return answer;
}

console.log(solution(8, 3));

❓새롭게 알게된 점

  1. Array.from() 메서드 파라미터

    • Array.from()메서드는 유사 배열 객체나 반복 가능한 객체를 얕게 복사해 새로운 배열 객체 생성
    • Array.from({length: prince}, (v, i) => i+1);
      • {length: number} 를 통해서 배열의 길이를 정할 수 있고
      • (value, index) => index + 1 을 통해서 배열의 요소 값을 넣을 수 있다!
  2. shift()메서드

    • 배열에서 첫 번째 요소를 제거하고, 제거된 요소를 반환.
    • 해당 메서드는 배열의 길이를 변하게 함
    const array1 = [1, 2, 3];
    const firstElem = array1.shift();
    
    console.log(array1); // [2, 3]
    console.log(firstElem); // 1
profile
PM을 지향하는 FE 개발자 이아현입니다 :)

0개의 댓글