daily 알고리즘 : 프로그래머스 0 level 15일차

소히·2022년 11월 15일
0

알고리즘Daily

목록 보기
19/22
post-thumbnail

숫자 찾기


문제

정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 0 < num < 1,000,000
  • 0 ≤ k < 10
  • num에 k가 여러 개 있으면 가장 처음 나타나는 자리를 return 합니다.

입출력 예

  • 232443에서 4는 4번째에 처음 등장합니다.

풀이

function solution(num, k) {
  let arr = num.toString().split("");
  return arr.includes(String(k)) ? arr.indexOf(String(k)) + 1 : -1;
}

숨어있는 숫자의 덧셈 (2)


문제

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • 1 ≤ my_string 안의 자연수 ≤ 1000
  • 연속된 수는 하나의 숫자로 간주합니다.
  • 000123과 같이 0이 선행하는 경우는 없습니다.
  • 문자열에 자연수가 없는 경우 0을 return 해주세요.

입출력 예

  • "aAb1B2cC34oOp"안의 자연수는 1, 2, 34 입니다. 따라서 1 + 2 + 34 = 37 을 return합니다.

풀이

function solution(my_string) {
  let check = /[^0-9]/g;
  return my_string.split(check).reduce((a, b) => Number(a) + Number(b), 0);
}


유한소수 판별하기


문제

소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

  • 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.

두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.


제한사항

  • a, b는 정수
  • 0 < a ≤ 1,000
  • 0 < b ≤ 1,000

입출력 예

  • 분수 11/22는 기약분수로 나타내면 1/2 입니다. 분모 2는 소인수가 2 뿐이기 때문에 유한소수 입니다. 따라서 1을 return합니다.

풀이

function solution(a, b) {
  for (let i = a; i >= 2; i--) {
    if (b % i === 0 && a % i === 0) {
      b = b / i;
      break;
    }
  }

  let i = b;
  if (b === 1) return 1;

  while (i % 2 === 0 || i % 5 === 0) {
    if (i % 2 === 0) {
      i = i / 2;
    } else if (i % 5 === 0) {
      i = i / 5;
    }
  }

  return i > 1 ? 2 : 1;
}

0개의 댓글