문 제
문자열 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글자를 넘지 않는다.
2
3 ABC
5 /HTP
출 력
각 테스트 케이스에 대해 P를 출력한다.
AAABBBCCC
/////HHHHHTTTTTPPPPP
코 드
using System;
namespace algorithm
{
class Program
{
static void Main(string[] args)
{
int T = int.Parse(Console.ReadLine());
string[] result = new string[T];
for (int i = 0; i < T; i++)
{
string[] S = Console.ReadLine().Split(' ');
// === 문자열 길이만큼 반복 === //
for (int j = 0; j < S[1].Length; j++)
{
int R = int.Parse(S[0]);
for (int k = 0; k < R; k++)
{
result[i] += S[1][j];
}
}
// === 문자열 길이만큼 반복 === //
}
// === 출력 === //
for (int i = 0; i < T; i++)
{
Console.WriteLine(result[i]);
}
// === 출력 === //
}
}
}
비교 코드 - 1
using System;
using System.Text;
using static System.Console; // 정의해서 사용가능
namespace backjun
{
class Program
{
static void Main(string[] args)
{
// T 테스트케이스 개수
int T = int.Parse(ReadLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < T ; i++)
{
// 각 테스트케이스는 반복 횟수와 문자열이, '공백'으로 구분된다.
// 따라서 입력 받는 부분은, 한 곳이다.
string[] testCases = ReadLine().Split(' ');
// R 반복 횟수
int R = int.Parse(testCases[0]);
// S 문자열
string S = testCases[1];
sb.Length = 0; // sb 객체 초기화
for (int j = 0; j < S.Length; j ++)
{
for (int k = 0; k < R; k++)
{
sb.Append(S[j].ToString());
}
}
WriteLine(sb);
}
}
}
}
공 부
string VS StringBuilder 차이
1. string 값타입이 아닌 참조변수 즉, 문자열을 조합할때마다 새로운 클래스를 생성하고 이전의 데이터는 GC에 의해서 수집됨! 결론적으로 문자열을 조합할때마다 부하 발생!
2. StringBuilder (가변 문자열) ‘System.Text’ 네임스페이스 사용. 문자열을 조합할때마다 새로운 변수를 생성하지 않고 결합 가능! 문자열을 조합할때 새로운 인스턴스가 생성되지 않는다!
결론 :
string :
- 문자열 수정이 적거나, 고정된 수의 문자열 연결 작업을 할 때 용이.
- 광범위한 검색을 하고 싶을 때는 StringBuilder 보다 효율적!
StringBuilder
- 문자열 수정이 잦으면서 변칙적인 수의 문자열 연결 작업을 할 때 용이.