카테고리 없음

JS 프로그래머스 (입문) 5-7일차

꼬드리 2024. 7. 8. 18:05

 

💡 년도 구하기

new Date().getFullYear() 메서드를 통해 주어진 날짜의 현지 시간 기준 연도를 반환시킬 수 있다.

문제에만 초점을 맞춰서 2022로 두고 +1 해서 풀었는데, 실제로는 아래 메서드 사용을 바란 문제 같다.

function solution(age) {
    return new Date().getFullYear() - age + 1;
}

 

 

💡 배열 뒤집기

function solution(num_list) {
    let answer = [];
    answer = num_list.slice().reverse();
    return answer;
}

reverse() 메서드를 사용해서 뒤집기 전에, slice() 메서드로 원본 배열을 복사해서 넣어주었다. 

 

 

💡 문자열 뒤집기

function solution(my_string) {
    let answer = '';
    answer = my_string.split('').reverse().join("")
    return answer;
}

reverse() 메서드를 써서 뒤집기 위해서는 문자열을 우선 배열로 변환시켜야 한다.

split()메서드를 사용하면, String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나누게 된다. split("")같은 경우 각 글자별로 나뉘어 배열에 담긴다. 이를 reverse()로 뒤집고 join("")로 배열을 문자열로 합쳐준다.

아래처럼 spread 연산자 형식으로 써도 좋을 것 같다.

function solution(my_string) {
    let answer = '';
    answer = [...my_string].reverse().join("")
    return answer;
}

 

 

💡짝수, 홀수 개수 구하기

if문으로 답을 풀긴 했는데 신박하게 푼 답이 있어서 갖고 온다.

a%2로 배열 인덱스에 맞는 경우 수를 증가시킨다.

 

function solution(num_list) {
    var answer = [0,0];

    for(let a of num_list){
        answer[a%2] += 1
    }

    return answer;
}

 

 

💡주어진 수만큼 문자 repeat 하기

이중 for문을 돌려서 푼 문제인데, map과 repeat()를 사용해서 푼 답이 있어서 뜯어보기로 한다.

spread 연산자를 통해 배열로 만들고 ,각 요소들에 repeat(n)을 해준 뒤 문자열로 변환한다.

function solution(my_string, n) {
    var answer = [...my_string].map(v => v.repeat(n)).join("");
    console.log(answer);
    return answer;
}

 

 

💡틸드 문법으로 소수점 아래 버리기

function solution(n, k) {
    
    let service = Math.trunc(n/10);
    let drink = k-service;
    let price = n*12000+drink*2000;
    return price;
}

본래 Math.trunc를 사용해서 푼 문제인데, ES6부터 틸드 문법인 ~~로 소수점을 제거하고 정수만 남기기가 가능하다고 한다. 음수에서도 -5.3일 경우 -5부분만 남길 수 있다.

즉, 아래와 같은 방식으로 써도 답이 같다.

function solution(n, k) {
    
    let service = Math.trunc(n/10);
    let drink = k-service;
    let price = n*12000+drink*2000;
    return price;
}

 

 

💡readline 모듈 사용해서 삼각형 출력하기

"*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.

 

갑작스럽게 readline모듈이라는 처음 보는 모듈이 등장한다. 

readline 모듈이란? - 한 번에 한 줄 씩 데이터를 읽기 위한 인터페이스를 제공하는 모듈.

코드는 이렇게 전개된다.

const readline = require("readline");

require 메서드를 사용하여 외부 모듈인 readline를 가져온다.

이후 readline인터페이스를 생성한다.

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

input에 대한 Readable stream인 process.stdin, output에 대한 writable stream인 process.stdout가 존재한다.

rl.on에 이벤트와 콜백함수를 전달하는데 주로 쓰이는 이벤트로 line(입력값을 한줄씩 읽어 문자열 타입으로 전달하는 이벤트) close(더이상 입력값이 없는 경우 해당하는 이벤트)가 있다. rl.close()는 인터페이스 종료, process.exit는 프로세스 종료를 의미한다.

 

✨line 이벤트는 입력값을 문자열로 가져오기 때문에 Number()메서드로 숫자로 바꾸는 과정이 필요하다. 

최종적으로 아래와 같은 코드가 완성된다. 실제로 짠 부분은 rl.on 안쪽에 해당한다. 

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

rl.on('line', function (line) {
    const n = Number(line.trim());
    for (let i = 1; i <= n; i++) {
        console.log('*'.repeat(i));
    }
    rl.close();
});

 

 

새로 발견한 코드 실시간 확인 사이트 : https://codepen.io/pen/?editors=1111