본문 바로가기

programming/알고리즘 풀이

[백준 알고리즘] 2675번 - 문자열 반복

반응형

1. 문제 예시 실행결과

 

 이번 문제는 입력받은 값만큼 한 문자를 반복해서 출력하는 문제이다. 나름 간단한 문제이지만, 결과 문자열을 어떻게 다루냐에 따라서 나름 생각이 깊어질 수 있는 문제이다. 다음은 문제와 예시 실행결과이다.

 

출처: https://www.acmicpc.net/problem/2675

 

2675번: 문자열 반복

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

www.acmicpc.net


2675번 문제 및 예시 실행결과


 다시한번 말하지만 이 문제는 출력형식에 따라 까다로워질 수 있다. 다음은 풀이 과정이다.

 

2. 문제풀이

 

 첫번째 입력은 간단하다. 솔직히 말하면 두번째 입력도 간단하다. scanf()를 통해 입력받을 때, 공백을 두어 구분하면 되기 때문이다. 문제는 출력이다. 이 문제에서 정해준 문자열의 최대값은 20이고 반복의 최댓값은 8이다. 그럼 처음부터 20 * 8짜리의 배열을 만들필요가 있을까? 나는 그렇게 생각하지 않았다. 그저 출력만 하면 되기 때문이다. 다음은 내가 작성한 코드이다.

 

#include <stdio.h>
#define SIZE 20

int main(void) {
	char input[SIZE];
	int num;
	int test_size;
	scanf("%d", &test_size);
	for (int i = 0; i < test_size; i++) {
		scanf("%d %s", &num, input);
		for (int i = 0; input[i]; i++) {
			for (int j = 0; j < num; j++)
				printf("%c", input[i]);
		}
		printf("\n");
	}
	return 0;
}

 

3. 결어

 

 언제나 말하지만, 내가 작성하는 코드는 정답이 아니다. 결과를 저장하는 문자열을 만들고 그 문자열에 출력하는 것도 하나의 방법이다. 만약 그 문자열을 따로 다뤄야 한다면 당연히 이런 방법이 더 우선적이다. 다만, 결과적으로 옳으며 조금 간단한 코드가 있다면 나는 간단한 방법을 사용하는 것이 좋다고 생각한다. 적어도 소중한 메모리는 괴롭히지 않기 때문이다.

반응형