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
'백준 알고리즘 단계별 풀이 (문제 수) > 문자열 (10)' 카테고리의 다른 글
[C++] 단어의 갯수 : 1152번 (0) | 2022.07.03 |
---|---|
[C++] 단어 공부(가장 많은 알파벳 찾기) : 1157번 (0) | 2022.07.02 |
[C++] 알파벳 찾기 : 10809번 (0) | 2022.06.26 |
[C++] 문자형 숫자의 합 : 11720번 (0) | 2022.06.26 |
[C++] 아스키코드 : 11654번 (0) | 2022.06.26 |