230328_Algorithm

majungha·2023년 4월 27일
1

알고리즘

목록 보기
10/71

오늘의 알고리즘 👍

📝 1. 콜라츠 추측


  • 1937년 Collatz란 사람에 의해 제기된 이 추측은,
    주어진 수가 1이 될 때까지 다음 작업을 반복하면,
    모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
  • 1-1. 입력된 수가 짝수라면 2로 나눕니다.
    1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
    1. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

▷ 내 풀이

function solution(num) {
  let count = 0;
  let qqq = num;
  if (num === 1) {
    return 0;
  }
  for (let i = 0; i <= 500; i++) {
    if (qqq !== 1) {
      qqq = qqq % 2 === 0 ? qqq / 2 : qqq * 3 + 1;
      count++;
    } else {
      break;
    }
  }
  if (count < 500) {
    return count;
  } else {
    return -1;
  }
}

▷ 수업 코드

function solution(num) {
  let count = 0;
  for (let i = 0; i < 500; i++) {
    if (num === 1) {
      break;
    }
    count++;
    if (num % 2 === 0) {
      // 짝수
      num = num / 2;
    } else {
      // 홀수
      num = num * 3 + 1;
    }
  }
  return num !== 1 ? -1 : count;
}

▷ forEach 매서드 사용 코드

function solution(num) {
  let answer = 0;

  new Array(500).fill(1).forEach((el) => {
    if (num !== 1) {
      answer++;
      num = num % 2 === 0 ? num / 2 : num * 3 + 1;
    }
  });
  return num !== 1 ? -1 : answer;
}

2. 두 개 뽑아서 더하기


  • 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서
    만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

▷ 내 풀이

▷ 해결 못함 ❌

function solution(numbers) {
  let qqq = numbers;
  let zzz = [];
  for (let i = 0; i < numbers.length; i++) {
    for (let j = 0; j < numbers.length; j++) {
      if (qqq[i] + qqq[i] !== qqq[j] + qqq[j]) {
        if (zzz[i] === zzz[i + j]) {
          zzz.push(qqq[i] + qqq[j]);
        }
      }
    }
  }
  return zzz;
}

▷ 수업 코드

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

▷ set 매서드 사용 코드

function solution(numbers) {
  const answer = new Set([]);
  for (let i = 0; i < numbers.length; i++) {
    for (let l = i + 1; l < numbers.length; l++) {
      let sum = numbers[i] + numbers[l];
      answer.add(sum);
    }
  }
  return Array.from(answer).sort((a, b) => a - b);
  // return [...answer].sort((a,b) => a - b)
}

▷ forEach 매서드 사용 코드

function solution(numbers) {
  const answer = new Set([]);
  numbers.forEach((num1, i) => {
    numbers.slice(i + 1, numbers.length).forEach((num2) => {
      const sum = num1 + num2;
      answer.add(sum); // answer.push(sum)
    });
  });
  return Array.from(answer).sort((a, b) => a - b);
}

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

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

0개의 댓글