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

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

덧셈식 출력하기

문제

두 정수 a, b가 주어질 때 다음과 같은 형태의 계산식을 출력하는 코드를 작성해 보세요. a + b = c

  • 제한사항
    • 1 ≤ a, b ≤ 100

소스 코드

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

let input = [];

rl.on('line', function (line) {
    input = line.split(' ').map(Number);
}).on('close', function () {
    console.log(`${input[0]} + ${input[1]} = ${input[0] + input[1]}`);
});

문자열 붙여서 출력하기

문제

두 개의 문자열 str1, str2가 공백으로 구분되어 입력으로 주어집니다. 입출력 예와 같이 str1str2을 이어서 출력하는 코드를 작성해 보세요.

  • 제한사항
    • 1 ≤ str1, str2의 길이 ≤ 10

소스 코드

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

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
}).on('close', function () {
  console.log(`${input[0]}${input[1]}`);
});

문자열 돌리기

문제

문자열 str이 주어집니다. 문자열을 시계방향으로 90도 돌려서 아래 입출력 예와 같이 출력하는 코드를 작성해 보세요.

  • 제한사항
    • 1 ≤ str의 길이 ≤ 10

소스 코드

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

let input = [];

rl.on('line', function (line) {
    input = [line];
}).on('close',function(){
  str = input[0];
  for (let i = 0; i < str.length; i++) console.log(str[i]);
});

홀짝 구분하기

문제

자연수 n이 입력으로 주어졌을 때 만약 n이 짝수이면 "n is even"을, 홀수이면 "n is odd"를 출력하는 코드를 작성해 보세요.

  • 제한사항
    • 1 ≤ n ≤ 1,000

소스 코드

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

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
}).on('close', function () {
  n = Number(input[0]);
  console.log(`${n} is ${n % 2 === 0 ? 'even' : 'odd'}`);
});

문자열 겹쳐쓰기

문제

문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

  • my_stringoverwrite_string은 숫자와 알파벳으로 이루어져 있습니다.
  • 1 ≤ overwrite_string의 길이 ≤ my_string의 길이 ≤ 1,000
  • 0 ≤ smy_string의 길이 - overwrite_string의 길이

소스 코드

const solution = (my_string, overwrite_string, s) => {
  const str = [...my_string];
  str.splice(s, overwrite_string.length, overwrite_string);
  return str.join('');
};
  • my_string의 문자들을 각각의 배열 요소로 만들어준 다음, splice() 함수를 사용하여 s부터 s + overwrite_string의 길이에 해당하는 요소를 overwrite_string으로 바꿔주었다. 그리고 join() 함수를 통해 str에 있는 요소들을 모두 문자열로 합쳐주었다.
splice()
  • array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) : arraystart부터의 요소를 삭제하거나 교체해준다,
    • start: 삭제 또는 변경을 시작할 인덱스
    • deleteCount : 배열에서 제거할 요소의 수
    • items : 배열에 추가할 요소, 없으면 삭제 진행
join()
  • array.join([separator]) : array에 있는 요소들을 하나의 문자열로 합쳐준다.
    • seperator : 요소 별 구분자(default : ',')

오답 코드 & 다른 풀이 소스 코드

const solution = (my_string, overwrite_string, s) => {
  let slice = my_string.slice(s, s + overwrite_string.length);

  return my_string.replace(slice, overwrite_string);
};
  • 다른 방식으로 문제를 풀던 중 위의 코드가 오답 처리가 되었다. 단순하게 replace() 하면 해당하는 하나만 변경해주기 때문에 이렇게 작성하면 될 거라 생각했는데, 가장 앞에 있는 한 문자열만 바꾸어주기 때문에, 중간에 있는 문자열을 바꾸고 싶은 경우, 오답 처리가 되는 것이었다.
my_string = "He11oWor1dHe11oWor1dHe11oWor1dHe11oWor1d"
overwrite_string = "lloWorl"
s = 12
  • 기대값 = "He11oWor1dHelloWorldHe11oWor1dHe11oWor1d"
  • 결과값 = "HelloWorldHe11oWor1dHe11oWor1dHe11oWor1d"
    맨 앞에 있는 "11oWor1"을 수정해주기 때문에 오답!
const solution = (my_string, overwrite_string, s) => {
  let first = my_string.substring(0, s);
  let subStr = overwrite_string;
  let last = my_string.substring(s + overwrite_string.length);

  return first + subStr + last;
};
  • 다른 풀이로는 substring()을 이용하여 문제 풀이를 진행하였다. substr() 함수와 사용하는 방법이 같은데, substr() 함수가 deprecated 되면서 사용 방식이 같은 substring()을 이용해주었다.
substring()
  • substring(indexStart[, indexEnd]) : indexStart부터 string의 일부를 자른 상태로 반환
    • indexStart : 문자열 자르기 시작 인덱스
    • indexEnd : 문자열 자르기 끝 인덱스

참고 자료

이 글이 도움이 되었나요?

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