[20230214_프로그래머스 알고리즘_Lv.1]

YunTrollpark·2023년 2월 14일
1

1. 두 정수 사이의 합

문제 설명

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

제한 사항
• a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
• a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
• a와 b의 대소관계는 정해져있지 않습니다.

function solution(a, b) {
  let big = 0
  let small = 0  
  let array = [a,b]
  if(a > b){
    big = a;
    small = b;
  } else if(a < b){
    big = b;
    small = a;
  }
  for(let i = 1; i<big-small; i++){
    array.push(small + i)
  }
return a === b ? a : array.reduce((a,b)=>(a+b))
}

// 해설
// 1. 먼저 큰수 작은수 변수 선언을 해줌
// 2. 배열에 일단 받은 변수를 넣어줌
// 3. 받은 인자 중 어느게 큰 수 인지 체크
// 4. for문을 큰수에서 작은수 뺀만큼 돌아서 배열에 작은수에 + 1 해줌
// 5. return으로 만약 받은 인자가 같으면 둘 중 아무거나 return 같지 않으면 만든 배열을 더해줌

2. 콜라츠 추측

문제 설명

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다. 
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

제한 조건
• 입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.

function solution(num) {
  let array = []
  let number = num

const a = (num) => {
  if(num === 1){
      return array;
  } else if(num % 2 === 0){
     number = num / 2;
     array.push(number);
    return a(number)
  } else if (num % 2 === 1){
     number = num * 3 + 1;
     array.push(number);
    return a(number)
  }
}
a(num)
  return array.length > 500 ? -1 : array.length
}
// 해설
// 1. 빈배열 하나 생성
// 2. number에 num을 할당
// 3. a 라는 함수를 하나 만들어서 해당 조건이 될 때까지 재귀 함수를 돌리기
// 4. a함수는 1이면 array 변수를 반환 그게 아니라 짝수면 인자를 2로 나누고 array에 나눈 값을 추가 그리고 재귀함수로 한번더 a 함수를 순회 / 홀수면 인자에 3을 곱한 후 1을 더하고 array에 해당 값을 추가 그리고 재귀함수로 한번더 a 함수를 순회

오늘도 힌트 안보고 머리 쥐어짜서 해결했다... 재귀함수 옛날에 사용한 기억이 있어서 덕분에 문제 겨우 풀었다 ㅠㅜㅠㅜ 1시간 동안 2문제라니... 2번 문제는 다른 사람들은 어떻게 풀었는지 너무 궁금하다

profile
코딩으로 세상에 이야기하는 개발자

0개의 댓글