출처 : 반크_세계유산 창덕궁
문제]
문자열 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를 출력한다.
예제 입력 1
2
3 ABC
5 /HTP
예제 출력 1
AAABBBCCC
/////HHHHHTTTTTPPPPP
출처 : 백준_2675번
참고풀이]
#include <stdio.h>
#include <stdlib.h>//malloc(), free() : 동적메모리 설정과 해제함수.
#include <string.h> //strlen():문자열의 문자의 개수 구하는 함수.
int main()
{
int T;//테스트 케이스의 개수 입력변수
int r,c,i,j;//인덱스 또는 반복변수
int chk;//조건에 맞지 않는 문자여부 체크변수
int R;//반복횟수 변수
char S[21];//반복대상 문자열 변수
char *QR_Code="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ₩$%*+-./:";
//테스트 케이스를 입력받는다.
scanf("%d",&T);
//테스트 케이스는 1~1000사이의 수가 입력된다.
if(T>=1 && T<=1000)
{
//각 테스트 케이스의 반복횟수와
//반복할 문자열을 입력받는다.
for(r=1;r<=T;r++)
{
scanf("%d%s",&R,S);
if((R>=1 && R<=8) && (strlen(S)>=1 && strlen(S)<=20))
{
//QR_Code에 포함된 문자인지 여부 체크한다.
for(c=0; c<strlen(S);c++)
{
chk=0;
for(i=0;i<strlen(QR_Code);i++)
if(S[c]==QR_Code[i])
{
chk=1; break;
}
if(!chk) return 0;
}
//결과 저장할 동적메모리 문자열을 선언
char *P=(char *)malloc(sizeof(char)*(R*strlen(S))+1);
P[R*strlen(S)]='\0';
//출력할 반복문자열을 구한다.
for(j=0,c=0;c<strlen(S);c++)
for(i=1;i<=R;i++)
P[j++]=S[c];
//결과출력
printf("%s\n",P);
//동적메모리 해제
free(P);
}
else return 0;
}
}
return 0;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도
'프로그램 > C언어 1000제' 카테고리의 다른 글
C언어 164제] 2006/2007 COCI 크로아티아 정보학 공개 경쟁 #1 나머지 (0) | 2024.09.12 |
---|---|
C언어 163제] 2009/2010 COCI 크로아티아 정보학 공개 경쟁 #1 음계 (0) | 2024.09.12 |
C언어 161제] 2006년 한국정보올림피아드 지역본선 초등부 2번 숫자의 개수 (0) | 2024.09.10 |
C언어 160제] 단어의 개수 구하기 (1) | 2024.09.10 |
C언어 159제] 동적메모리를 활용한 최대값, 최소값 구하기 (1) | 2024.09.09 |
댓글