프로그래머스/Javascript : 기초 문제 8일차

프로그래머스/Javascript : 기초 문제 8일차

간단한 논리 연산

문제

boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.

(x1x2) ∧ (x3x4)

소스 코드

const solution = (x1, x2, x3, x4) => {
  const operation1 = (x1 || x2);
  const operation2 = (x3 || x4);
  return operation1 && operation2;
};

주사위 게임 3

문제

1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.

네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다. 세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다. 주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다. 어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다. 네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다. 네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

  • 제한사항
    • a, b, c, d는 1 이상 6 이하의 정수입니다.

(x1x2) ∧ (x3x4)

소스 코드

const solution = (a, b, c, d) => {
  let obj = {};

  [a, b, c, d].forEach(num => {
    obj[num] = (obj[num] || 0) + 1;
  });
  let entries = Object.entries(obj);
  entries.sort((a, b) => b[1] - a[1]);
  let sortedKeys = entries.map(entry => entry[0]);

  if (obj[sortedKeys[0]] === 4) {
    return Number(sortedKeys[0]) * 1111;
  } else if (obj[sortedKeys[0]] === 3) {
    return (10 * Number(sortedKeys[0]) + Number(sortedKeys[1])) ** 2;
  } else if (obj[sortedKeys[0]] === 2 && sortedKeys.length === 2) {
    return (Number(sortedKeys[0]) + Number(sortedKeys[1])) * Math.abs(Number(sortedKeys[0]) - Number(sortedKeys[1]));
  } else if (obj[sortedKeys[0]] === 2 && sortedKeys.length === 3) {
    return Number(sortedKeys[1]) * Number(sortedKeys[2]);
  } else {
    return Number(sortedKeys.sort((a, b) => a - b)[0]);
  }
};
  • obj 변수에 각 숫자 개수를 세어준 다음 sortedKeysvalue개수가 많은 순서대로 key를 정렬해 주었다. 그리고 나온 숫자에 따라 계산식을 적용하였다.

글자 이어 붙여 문자열 만들기

문제

문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_stringindex_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

  • 제한사항
    • 1 ≤ my_string의 길이 ≤ 1,000
    • my_string의 원소는 영소문자로 이루어져 있습니다.
    • 1 ≤ index_list의 길이 ≤ 1,000
    • 0 ≤ ndex_list의 원소 < my_string의 길이

소스 코드

const solution = (my_string, index_list) => {
  let answer = '';
  const string = my_string.split('');
  for (const item of index_list) {
    answer += string[item];
  }

  return answer;
};

9로 나눈 나머지

문제

음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다. 이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.

  • 제한사항
    • 1 ≤ number의 길이 ≤ 100,000
    • number의 원소는 숫자로만 이루어져 있습니다.
    • number는 정수 0이 아니라면 숫자 '0'으로 시작하지 않습니다.

소스 코드

const solution = number => {
  const array = number.split('').map(Number);
  let sum = 0
  array.map(item => sum += item);

  return Number(sum) % 9;
};

문자열 여러 번 뒤집기

문제

문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_stringqueries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.

(x1x2) ∧ (x3x4)

소스 코드

const solution = (my_string, queries) => {
  const array = my_string.split('');
  queries.map(item => {
    for (let i = 0; i < (item[1] - item[0]) / 2; i++){
      const temp = array[item[1] - i];
      array[item[1] - i] = array[item[0] + i];
      array[item[0] + i] = temp;
    }
  });

  return array.join('');
};

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.