관리 메뉴

Silver Library (Archived)

2675번 - 백준 JS 본문

CS Library/JavaScript - Data Structure

2675번 - 백준 JS

Ayin Kim 2021. 10. 22. 20:41
반응형
 

2675번: 문자열 반복

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다

www.acmicpc.net

문제

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

입력

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다. 

출력

각 테스트 케이스에 대해 P를 출력한다.

 

메모.

문자열을 받은 후 -> 각 문자를 반복하고 -> 새 문자열을 만든 후 -> 출력

[첫번째 입력받은 문자를 R번 반복, 두번쨰 문자를 R번 반복, 이렇게 해서 P를 생성하도록 설계.

 

fs module 에 input 까지, toString() 까지는 예상 가능. split 은 다닥다닥 붙은 문자를 위해서 사용 된 것으로 보임.

 

이를 실현하려면:

 

코드 1:

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

/* receive any input string as number */
let caseCount = Number(input[0]);
/* variable for priting result later */
let result = '';

// 첫번째 문자열 반복문 (받아 들이는 쪽)
for (let i = 1; i <= caseCount; i++) {
    let count = Number(input[i].split(' ')[0]); // 각 케이스 당 문자 반복 횟수 (R)
    let cases = input[i].split(' ')[1]; // 케이스 문자열 분리

// 두번째 문자열 반복문 (받아 들인 걸 카운트 하는 쪽)
for (let j = 0; j < cases.length; j++) {
    for (let k = 0; k < count; k++) {
        result += cases[j];
    }
}
    result += '\n';
}

console.log(result);

다른 코드 2:

입력 데이터의 / 첫번째 줄에 있는 / 테스트 케이스 개수 T 값으로 / For 문을 실행.
문자열 S의 각 문자를, R번 반복시켜 / 새로운 변수에 모든 문자를 누적시켜준 후 / 출력.
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');

const num1 = input.shift();

for (let i = 0; i < num1; i++) {
    let answer = '';
    
    const [num2, str] = input[i].split(" ");
    
    for (let j = 0; j < str.length; j++) {
        for (let c = 0; c < num2; c++) {
            answer += str[j];
  	}
    }
    
    console.log(answer);
}

코드 3:

repeat 메서드를 이용한 사례:

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');

const num1 = input.shift();

for (let i = 0; i < num1; i++) {
    let answer = '';
    
    const [num2, str] = input[i].split(" ");
    
    for (let j = 0; j < str.length; j++) {
        answer += str[j].repeat(num2);
    }
    
    console.log(answer);
}

그런데, 이런 코드도 있다. 그나마 이게 이해하기에는 좀 무난한 편.

const readline = require('readline');

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

const input = [];

rl.on('line', function (line) {
    input.push(line);
}).on('close', function () {
    // T :  테스트 케이스의 개수
    const T = +input[0];

    for (let i = 0; i < T; i++) {
        let result = '';
        // R : 문자열 반복 수
        const R = +input[i + 1].split(' ')[0];
        // S : 문자열
        const S = input[i + 1].split(' ')[1];
        for (let j = 0; j < S.length; j++) {
            // repeat() : 문자열을 n번 반복
            result += S.split('')[j].repeat(R);
        }
        console.log(result);
    }

    process.exit();
});

 

 

모듈/입력 : [1], [2]

참고: [1], [2], [3]