문제 링크
난이도 : 브론즈 2

문제 내용

문자열 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를 출력한다.

문제 분석

T 읽고 T만큼 반복문

R, S읽고 S에 있는 글자 하나하나 반복

R만큼 글자 반복출력

한 케이스 끝나면 줄바꿈

작성한 코드

#include <iostream>
#include <cstring>
 
using namespace std;
 
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    int t;
    cin >> t;
 
    for (int i = 0; i<t; i++){
        int r;
        string s;
        cin >> r >> s;
 
        for(auto one : s){
            for(int j = 0; j < r; j++){
                cout << one;
            }
        }
        cout << "\\n";
    }
 
}

우수 코드 분석

#include<cstdio>
int t,r;
char s[21];
int main() {
	scanf("%d", &t);
	while (t--) {
		scanf("%d %s", &r, &s);
		for (int i = 0; s[i]; i++) for (int j = r; j--;) putchar(s[i]);
		puts("");
	}
	return 0;
}

For문에서 배열 순회할 때 s[i]이런식으로 하면 알아서 순회하는듯

Int j = r; j—; 이거는 종료조건이 없는데 어떻게 돌아가는거지

⇒ 루프를 위해 증감식의 역할을 하면서도 조건의 역할을 함. J—에 의해 j가 -1이 됨 ⇒ 이전에 j가 0이었음 ⇒ 동작 종료