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

마지막 두 원소

문제

정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.

  • 제한사항
    • 2 ≤ num_list의 길이 ≤ 10
    • 1 ≤ num_list의 원소 ≤ 9

소스 코드

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

let input = '';

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

const solution = num_list => {
  let answer = num_list;
  const len = num_list.length;
  answer.push(num_list[len - 1] > num_list[len - 2] ? num_list[len - 1] - num_list[len - 2] : num_list[len - 1] * 2);
  return answer;
};

수 조작하기 1

문제

정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

"w" : n이 1 커집니다. "s" : n이 1 작아집니다. "d" : n이 10 커집니다. "a" : n이 10 작아집니다. 위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.

  • 제한사항
    • 100,000 ≤ n ≤ 100,000
    • 1 ≤ control의 길이 ≤ 100,000
      • control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.

소스 코드

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

let number = 0;
let input = '';
let count = 0;

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

const solution = (n, control) => {
  let answer = n;
  const strArray = control.split('');
  strArray.map(item => {
    if (item === 'w') {
      answer += 1;
    } else if (item === 's') {
      answer -= 1;
    } else if (item === 'd') {
      answer += 10;
    } else if (item === 'a') {
      answer -= 10;
    }
  });

  return answer;
};

수 조작하기 2

문제

정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.

"w" : 수에 1을 더한다. "s" : 수에 1을 뺀다. "d" : 수에 10을 더한다. "a" : 수에 10을 뺀다. 그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.

  • 제한사항
    • 2 ≤ numLog의 길이 ≤ 100,000
      • 100,000 ≤ numLog[0] ≤ 100,000
      • 1 ≤ inumLog의 길이인 모든 i에 대해 |numLog[i] - numLog[i - 1]|의 값은 1 또는 10입니다.

소스 코드

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

let input = '';

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

const solution = (numLog) => {
  let answer = '';
  for (let i = 1; i < numLog.length; i++) {
    const currNum = numLog[i];
    const prevNum = numLog[i - 1];
    if (currNum - prevNum === 1) {
      answer += 'w';
    } else if (currNum - prevNum === -1) {
      answer += 's';
    } else if (currNum - prevNum === 10) {
      answer += 'd';
    } else if (currNum - prevNum === -10) {
      answer += 'a';
    }
  }

  return answer;
};

수열과 구간 쿼리 3

문제

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.

query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.

위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

  • 제한사항
    • 1 ≤ arr의 길이 ≤ 1,000
      • 0 ≤ arr의 원소 ≤ 1,000,000
    • 1 ≤ queries의 길이 ≤ 1,000
      • 0 ≤ i < j < arr의 길이

소스 코드

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

let input = '';
let queries = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    input = line.split(' ').map(Number);
  } else {
    queries = line.split(' ');
    queries = queries.map(item => {
      return item.split('');
    });
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(input, queries);
  console.log(answer);
});

const solution = (arr, queries) => {
  queries.map(item => {
    let temp;
    temp = arr[Number(item[0])];
    arr[Number(item[0])] = arr[Number(item[1])];
    arr[Number(item[1])] = temp;
  });

  return arr;
};

수열과 구간 쿼리 2

문제

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

query마다 순서대로 sie인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.

각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

  • 제한사항
    • 1 ≤ arr의 길이 ≤ 1,000
      • 0 ≤ arr의 원소 ≤ 1,000,000
    • 1 ≤ queries의 길이 ≤ 1,000
      • 0 ≤ se < arr의 길이
      • 0 ≤ k ≤ 1,000,000

소스 코드

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

let input = '';
let queries = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    input = line.split(' ').map(Number);
  } else {
    queries = line.split(' ');
    queries = queries.map(item => {
      return item.split('').map(Number);
    });
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(input, queries);
  console.log(answer);
});

const solution = (arr, queries) => {
  let answer = [];
  for (let i = 0; i < queries.length; i++) {
    const item = queries[i];
    const temp = arr.slice(item[0], item[1] + 1);
    answer.push((temp.filter(num => item[2] < num)).sort((a, b) => a - b)[0] || -1);
  }

  return answer;
};

이 글이 도움이 되었나요?

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