Silver Library (Archived)
2675번 - 백준 JS 본문
반응형
문제
문자열 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();
});
'CS Library > JavaScript - Data Structure' 카테고리의 다른 글
REST API 와 fetch에 대한 간단 기록. (0) | 2022.07.03 |
---|---|
이해 가능해 보이는 코드 - 10952번 JS (0) | 2021.10.12 |
Prototype 을 요약해보기. (0) | 2021.09.08 |
연결 리스트와 이진 트리 (0) | 2021.09.07 |
다시봐도 헷깔리는 While 문 (0) | 2021.08.25 |