본문 바로가기
백준 알고리즘 단계별 풀이 (문제 수)/문자열 (10)

[C++] 문자열 반복 / 단어 재조합하기 : 2675번

by 17번 일개미 2022. 6. 28.
728x90

문제

 

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

 


풀이

 

입력 받은 문자열 S 를 재구성해서 출력하는 문제다.

재구성 방법은 3 ABC 를 받으면 3만큼 반복하여  AAABBBCCC 를 출력하면 된다.

 

전체 코드는 다음과 같다.

#include <iostream>
using namespace std;

int main()
{
	string* s; // 문자열
	int testCase; // 테스트 케이스 수
	int* repeat; // 반복 횟수

	cin >> testCase; // 테스트 케이스 수 입력
	cin.ignore();

	s = new string[testCase]; // 테스트 케이스 만큼 공간 할당
	repeat = new int[testCase];

	// 테스트 케이스 수 만큼 반복
	for (int i = 0; i < testCase; i++)
	{
		cin >> repeat[i]; // 반복횟수 입력
		cin >> s[i]; // 문자열 입력
		cin.ignore();
	}
	// 테스트 케이스 수 만큼 회전
	for (int i = 0; i < testCase; i++)
	{
		// i번째 문자열의 길이만큼
		for (int j = 0; j < s[i].length(); j++)
		{
			// 반복할 횟수 만큼
			for (int k = 0; k < repeat[i]; k++)
			{
				cout << s[i][j]; // 출력
			}
		}
		cout << "\n"; // 단어 사이 구분
	}
	delete[] s; // 메모리 해제
	delete[] repeat;
}

1. 문자열 포인터 s 를 선언한다.

2. 각 문자열 별로 반복횟수를 저장하는 정수형 포인터 repeat 을 선언한다.

3. 전체 테스트 케이스 수인 정수 testCase 를 선언한다.

4. 입력 받은 테스트 케이스 수 만큼 s 와 repeat을 동적 메모리 할당한다.

5. 반복문을 돌아 문자열 s 와 그 반복횟수인 repeat을 저장한다.

6. 삼중 반복문을 돌면서 각 테스트 케이스 마다, 원래 문자열의 한 글자씩 돌면서 반복 횟수만큼 출력한다.

 

삼중반복문의 사용을 피하고 싶어서 연구해보았는데, 삼중 반복문을 피할 수 있을만한 방법이

떠오르지 않는다.

 

문제의 단계가 낮은만큼 출제의도와는 관련이 없을 것 같아보이고,

문제의 메모리 제한과 글자 제한이 있는 만큼 여기서만큼은 삼중 반복문의 사용도 나쁘지 않아 보인다.

728x90