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

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

조건에 맞게 수열 변환하기 1

문제

정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.

  • 제한사항
    • 1 ≤ arr의 길이 ≤ 1,000,000
      • 1 ≤ arr의 원소의 값 ≤ 100

소스 코드

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let arr = '';

rl.on('line', (line) => {
  arr = line.split(' ').map(Number);
  rl.close();
}).on('close', () => {
  const answer = solution(arr);
  console.log(answer);
});

const solution = arr => {
  let answer = [];
  for (const item of arr) {
    if (item >= 50 && item % 2 === 0) {
      answer.push(item / 2);
    } else if (item < 50 && item % 2 === 1) {
      answer.push(item * 2);
    } else {
      answer.push(item);
    }
  }

  return answer;
};

조건에 맞게 수열 변환하기 2

문제

정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.

이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.

단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.

  • 제한사항
    • 1 ≤ arr의 길이 ≤ 1,000,000
      • 1 ≤ arr의 원소의 값 ≤ 100

소스 코드

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let arr = '';

rl.on('line', (line) => {
  arr = line.split(' ').map(Number);
  rl.close();
}).on('close', () => {
  const answer = solution(arr);
  console.log(answer);
});

const solution = arr => {
  let tempArray = [...arr];
  let array = arr;
  let count = 0;

  while (true) {
    for (let index in array) {
      if (array[index] >= 50 && array[index] % 2 === 0) {
        array[index] = array[index] / 2;
      } else if (array[index] < 50 && array[index] % 2 === 1) {
        array[index] = array[index] * 2 + 1;
      } else {
        array[index] = array[index];
      }
    }

    console.log(JSON.stringify(tempArray), JSON.stringify(array))
    if (JSON.stringify(tempArray) === JSON.stringify(array)) {
      return count;
    }
    tempArray = [...array];
    count++;
  }
};

1로 만들기

문제

정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.

10 / 2 = 5 (5 - 1) / 2 = 2 2 / 2 = 1 위와 같이 3번의 나누기 연산으로 1이 되었습니다.

정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.

  • 제한사항
    • 3 ≤ num_list의 길이 ≤ 15
    • 1 ≤ num_list의 원소 ≤ 30

소스 코드

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let arr = '';

rl.on('line', (line) => {
  arr = line.split(' ').map(Number);
  rl.close();
}).on('close', () => {
  const answer = solution(arr);
  console.log(answer);
});

const solution = num_list => {
  let count = 0;
  for (let num of num_list) {
    while (num !== 1) {
      if (num % 2 === 0) {
        num = num / 2;
      } else {
        num = (num - 1) / 2;
      }
      count++;
    }
  }

  return count;
};

길이에 따른 연산

문제

정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.

10 / 2 = 5 (5 - 1) / 2 = 2 2 / 2 = 1 위와 같이 3번의 나누기 연산으로 1이 되었습니다.

정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.

  • 제한사항
    • 3 ≤ num_list의 길이 ≤ 15
    • 1 ≤ num_list의 원소 ≤ 30

소스 코드

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let arr = '';

rl.on('line', (line) => {
  arr = line.split(' ').map(Number);
  rl.close();
}).on('close', () => {
  const answer = solution(arr);
  console.log(answer);
});

const solution = num_list => {
  let answer = 0;
  if (num_list.length > 10) {
    for (const num of num_list) {
      answer += num;
    }
  } else {
    answer = 1;
    for (const num of num_list) {
      answer *= num;
    }
  }

  return answer;
};

원하는 문자열 찾기

문제

알파벳으로 이루어진 문자열 myStringpat이 주어집니다. myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.

단, 알파벳 대문자와 소문자는 구분하지 않습니다.

  • 제한사항
    • 1 ≤ myString의 길이 ≤ 100,000
    • 1 ≤ pat의 길이 ≤ 300
    • myStringpat은 모두 알파벳으로 이루어진 문자열입니다.

소스 코드

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let myString = '';
let pat = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    myString = line;
  } else {
    pat = line;
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(myString, pat);
  console.log(answer);
});

const solution = (myString, pat) => {
  if (myString.toLowerCase().includes(pat.toLowerCase())) {
    return 1;
  } else {
    return 0;
  }
};

이 글이 도움이 되었나요?

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