문제
문제: 문자열 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를 출력한다.
예제 입력: 2
3 ABC
5 /HTP
예제 출력: AAABBBCCC
/////HHHHHTTTTTPPPPP
풀이
const fs = require('fs');
const input = fs.readFileSync(0, 'utf-8').trim().split('\n');
const a = Number(input[0]); // 테스트 케이스 개수
for(let i = 0; i <= a; i++){
let [R,S] = input[i].trim().split(' '); // R: 반복 횟수, S:문자열
R = Number(R); // R을 숫자로 변환
let result = '';
for(let char of S){
result += char.repeat(R); // 각 문자를 R번 반복
}
console.log(result); // 한 줄씩 출력
}
풀이 해석
1. 입력값 읽고, 개행문자 제거 후 배열로 변환
- fs.readFileSync(0, 'utf-8') → 백준에서 입력받는 방법
- .trim() → 입력값 앞 뒤 공백 및 개행 문자 제거
- .split('\n') → 줄(\n)을 기준으로 나누어 배열 형태로 저장
2. 첫 번째 줄을 숫자로 변환하여 테스트 케이스 개수(a)에 저장
- input[0] → 첫 번째 줄을 가져옴
- Number(input[0]) → 문자열을 숫자로 변환하여 테스트 케이스 개수(a)로 저장
3. 테스트 케이스 개수(a)만큰 반복
- i=1부터 a까지 반복
- input[i]에서 한 줄씩 가져와 문자열을 변환
4. R반복횟수와 S문자열 분리
- input[i] → i번째 줄을 가져옴(예: 3 ABC)
- .trim() → 혹시 모를 공백 제거
- .split(' ') → 공백 기준으로 나누어 배열로 저장 (["3", "ABC"])
- let [R, S] = ... → 배열 구조 분해 할당을 사용해 R(반복 횟수)과 S(문자열)로 저장
5. R을 숫자로 변환
- 원래 R은 문자열 '3'과 같은 형태이므로 Number(R)을 사용하여 숫자로 변환
6. 결과 문자열(result)을 저장할 변수 초기화
- 반복된 문자열을 저장할 result변수 선언
- 처음에는 빈 문자열('')
7. S의 각 문자를 R번 반복하여 result에 추가
- for(let char of S){} → 문자열의 S의 각 문자를 하나씩 꺼내서 char에 저장
- char.repeat(R) → 문자를 R번 반복
- result += char.repeat(R); → result에 반복된 문자 추가
8. result출력
- 반복이 끝나면 완성된 문자열을 출력
- console.log()는 자동으로 개행(\n)을 포함하므로 테스트 케이스마다 한 줄씩 출력됨.
더 알아보기
1. for..of 문이란?
- for..of문은 배열, 문자열 같은 iterable(반복 가능한) 객채의 요소를 하나씩 꺼내서 반복하는 문법이다.
- 많이 사용한 for문(for(let i=0; i<arr.length; i++))과 비교하면 더 간단하고 직관적이다.
- for..of문의 기본 문법
for (let 요소 of 반복할_객체) {
// 각 요소에 대한 동작
}
설명
반복할_객체: 배열, 문자열, Set, Map 같은 반복 가능한(iterable) 객체
요소: 객체에서 하나씩 꺼낸 값이 저장됨
기본 for 문보다 더 간결하게 사용할 수 있음
2. for..of문과 forEach비교
배열을 순회할 때, forEach()도 많이 사용된다. 하지만 for..of문과 차이가 있다.
// forEach()
const arr = [1, 2, 3];
arr.forEach((num) => {
console.log(num);
});
콜백 함수를 사용하여 배열 요소를 반복
배열의 인덱스를 신경 쓸 필요 없음
//===========================================
// for..of문
for (let num of arr) {
console.log(num);
}
콜백 함수를 사용하지 않고 바로 반복 가능
break, continue 같은 제어문을 사용할 수 있음
즉, forEach()는 콜백함수를 사용해야하지만, for..of는 더 직관적으로 사용할 수 있다.
3. 정리
- for...of는 배열이나 문자열을 쉽게 반복할 수 있는 문법!
- forEach()와 달리 break, continue를 사용할 수 있음.
- for...of는 배열, 문자열뿐만 아니라 Set, Map 같은 다른 반복 가능한 객체에도 사용 가능!
'알고리즘 Node.js' 카테고리의 다른 글
백준 2908문제. 상수 (0) | 2025.03.20 |
---|---|
백준 1152문제. 단어의 개수 (0) | 2025.03.19 |
백준 10809문제. 알파벳 찾기 (0) | 2025.03.17 |
백준 11720문제. 숫자의 합 (0) | 2025.03.16 |
백준 11654문제. 아스키 코드 (0) | 2025.03.15 |