본문 바로가기
알고리즘 Node.js

백준 2675문제. 문자열 반복

by 반갑조? 2025. 3. 18.

문제

문제: 문자열 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