230329_Algorithm

majungha·2023년 4월 27일
1

알고리즘

목록 보기
11/71

오늘의 알고리즘 👍


📝 1. 없는 숫자 더하기

  • 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다.
  • numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

▷ 입출력 예

solution([1,2,3,4,6,7,8,0]) // 14
solution([5,8,4,0,6,7,9]) // 6 

▷ 와이파이 문제로 해결 못함 ❌

▷ 수업 풀이

function solution(numbers) {
  let answer = 0;
  for (let i = 1; i <= 9; i++) {
    if (!numbers.includes(i)) {
      answer += i;
    }
  }
  return answer;
}
// fill reduce includes 매서드 사용 풀이
function solution(numbers) {
  const answer = new Array(9)
                    .fill(1)
                    .reduce((acc, cur, i) => {
                        const num = cur + i;
                        return acc + (
                            numbers.includes(num) ? 0 : num
                        );
                    }, 0);
  return answer;
}

📝 2. 두 정수 사이의 합

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

▷ 입출력 예

solution(3, 5) // 12
solution(3, 3) // 3
solution(5, 3) // 12

▷ 와이파이 문제로 해결 못함 ❌

▷ 수업 풀이

function solution(a, b) {
  let answer = 0;
  // a와 b가 같을 때, a를 출력
  if (a === b) {
    return a;
}
  // 최소값 구하기
  // 반복문이 실행될 때, 설정된 초기값 (a와 b 중 더 작은 숫자)
  // const start = a < b ? b : a
  const start = Math.min(a, b);
  // 최대값 구하기
  // 반복문이 종료되는 조건을 설정 (a와 b 중 더 큰 숫자)
  // const start = a > b ? a : b
  const end = Math.max(a, b);
  for (let i = start; i <= end; i++) {
    answer += i;
  }
  return answer;
}

▷ fill reduce 매서드 사용 풀이

function solution(a, b) {
  if(a === b) {
      return a
  }
  const start = Math.min(a, b) 
  const end = Math.max(a, b)
  const answer = new Array(end - start)
                  .fill(1)
                  .reduce((acc,cur,i) => {
                      const num = start + cur + i
                      return acc + num
                  }, start)
  return answer
}

📝 3. 하샤드 수

  • 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
  • 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
  • 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

▷ 입출력 예

solution(10) // true
solution(12) // true
solution(11) // false
solution(13) // false

▷ 와이파이 문제로 해결 못함 ❌

▷ 수업 풀이

function solution(x) {
  // 자릿수의 합을 저장하는 변수 answer
  let answer = 0;
  // 숫자 타입의 x 변수에 담긴 값을 문자열로 변환
  x = String(x);
  for (let i = 0; i < x.length; i++) {
    answer += Number(x[i]);
  }
비교식을 리턴 : 나머지 값이 없다면 true, 있다면 false
  return x % answer === 0;
}

❗ toString매서드

  • 정수 뒤에는 .을 소수점으로 인식하기 때문에 소괄호( )로 묶어주거나 변수에 저장해서 매서드를 사용해야 한다.

  • 예시

123.toString() // SyntaxError: Invalid or unexpected token
(123).toString() // '123'
let qqq = 123
qqq.toString() // '123'

▷ toString매서드 사용 풀이

function solution(x) {
  // 자릿수의 합을 저장하는 변수 answer
  const answer = x.toString()
                  .split('')
                  .reduce((acc, cur) => {
                      return Number(acc) + Number(cur)
                  })
  return x % answer === 0
}

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

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

0개의 댓글