반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-19 00:03
관리 메뉴

ImJay

[C언어] 백준 2675번 : 문자열 반복 본문

백준 - C, C++/07. 문자열

[C언어] 백준 2675번 : 문자열 반복

ImJay 2020. 10. 17. 00:00
반응형

백준 2675번 : 문자열 반복

- 사용언어 : C언어

www.acmicpc.net/problem/2675

1. 문제

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

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

2. 코드

#include <stdio.h>
#include <string.h>

int main(void) {
	
	int T,R;
	char S[20];
	
    	scanf("%d", &T);
	
	for(int i=0; i<T; i++) {
				
		scanf("%d %s", &R, S);
		
		for(int j=0; j < strlen(S); j++) 
			for(int k=0; k<R; k++) printf("%c", S[j]);
		
		printf("\n");
	}

}

3. 풀이

먼저 문자열을 출력하는 방법을 익혀야 합니다.

 

기본적으로 포인터의 개념에 대해 명확히 알고 있으면 좋겠지만,

 

저 또한 모르기에 일단 포인터를 배제하고 설명드립니다.

 

배열 S를 %s로 받을 때는 scanf에서 그냥 S를 씁니다.

 

그렇다면 제가 ABC를 입력했을 때, S[0]에는 무엇이 저장되어 있을까요?

 

65가 저장되어 있습니다.

 

이 65의 의미는 무엇일까요?

 

숫자 65는 아스키코드로 변환하면 바로 A입니다.

 

여러분이 어려워 했던 부분은, 문자열에서 어떻게 하면 각 문자를 따로 구분할 수 있을지입니다.

 

예시를 들어보겠습니다.

 

printf("%d", S[0]);

 

printf("%s", &S[0]);

 

printf("%c", S[0]);

 

위를 출력하면 다음과 같습니다.

 

65

 

ABC

 

A

 

궁금증이 해결 되셨을 것 같습니다.

 

%c는 정수를 문자로 변환하여 출력하는데요,

 

S[0]에는 숫자 65가 저장되어 있고, 이를 %c를 통해 문자로 변환시켜야 A를 출력할 수 있습니다.

 

 

이 사실을 알면 문제풀이는 쉬워집니다.

 

for(int k=0; k<R; k++) printf("%c", S[k]);

 

반복횟수 R만큼 S[j]를 %c로 출력해주면 됩니다.

 

for(int j=0; j < strlen(S); j++)  

 

여기서 j의 범위는 문자열의 길이 strlen(S)로 지정해주면 됩니다.

 

위 반복문을 빠져나간 후 \n으로 줄을 바꿔 주는 것도 유의 하셔야 됩니다.

반응형
Comments