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

소히·2022년 10월 30일
0

알고리즘Daily

목록 보기
10/22
post-thumbnail

저주의 숫자 3


문제

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.

정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ n ≤ 100

입출력 예

  • 15를 3x 마을의 숫자로 변환하면 25입니다.
  • 40을 3x 마을의 숫자로 변환하면 76입니다.

풀이

초기값 1을 가지고 있는 answer 배열을 생성 후 길이가 n과 같아질 때 까지
3의 배수가 아니면서 3을 포함하지 않는 숫자를 push 해주었다.

그 후, 마지막 배열값을 리턴해주었다.

function solution(n) {
  let answer = [1];
  let i = 1;
  while (answer.length < n) {
    i++;
    if (i % 3 !== 0 && !(i + "").includes(3)) {
      answer.push(i);
    }
  }
  return answer.pop();
}

순서쌍의 개수


문제

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ n ≤ 1,000,000

입출력 예

  • n이 20 이므로 곱이 20인 순서쌍은 (1, 20), (2, 10), (4, 5), (5, 4), (10, 2), (20, 1) 이므로 6을 return합니다.

풀이

n을 1부터 n까지의 수로 나누면서 나머지가 0이 되는 수가 있을 때마다 answer의 카운트를 1만큼 늘려준다.
이 작업을 n만큼 반복문 돌린다.

function solution(n) {
  let answer = 0;
  let i = 1;
  while (i <= n) {
    if (n % i === 0) {
      answer++;
    }
    i++;
  }
  return answer;
}


진료순서 정하기


문제

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 중복된 원소는 없습니다.
  • 1 ≤ emergency의 길이 ≤ 10
  • 1 ≤ emergency의 원소 ≤ 100

입출력 예

  • emergency가 [3, 76, 24]이므로 응급도의 크기 순서대로 번호를 매긴 [3, 1, 2]를 return합니다.

풀이

emergency 배열을 내림차순으로 sort한 후 emergency 배열을 index+1 값으로 대체한다.

function solution(emergency) {
  let answer = [...emergency].sort((a, b) => b - a);
  return emergency.map((el) => answer.indexOf(el) + 1);
}

외계행성의 나이


문제

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.


제한사항

  • age는 자연수입니다.
  • age ≤ 1,000
  • PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.

입출력 예

  • age가 23이므로 "cd"를 return합니다.

풀이

알파벳을 나열한 후 매개변수 age 값에 맞게 인덱스 값으로 대치해주었다.

function solution(age) {
  let answer = "";
  let alphabet = "abcdefghij";
  [...String(age)].map((el) => {
    answer += alphabet[el];
  });
  return answer;
}

배열 자르기


문제

정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 2 ≤ numbers의 길이 ≤ 30
  • 0 ≤ numbers의 원소 ≤ 1,000
  • 0 ≤num1 < num2 < numbers의 길이

입출력 예

  • [1, 3, 5]의 1번째 인덱스 3부터 2번째 인덱스 5까지 자른 [3, 5]를 return 합니다.

풀이

slice 메서드를 사용하여 num1, num2 사이의 인덱스 값을 리턴해주었다.

function solution(numbers, num1, num2) {
  return numbers.slice(num1, num2 + 1);
}

0개의 댓글