[백준 BOJ] 2675번 문자열 반복 (C언어)

2022. 1. 27. 00:48PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2675번: 문자열 반복

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

www.acmicpc.net

백준 BOJ 2675번 문자열 반복 문제 사진

 

접근 방법 - 문자열과 반복문을 이용한 연산 문제

백준 2675번 문제는 문자열과 반복문을 적절하게 사용하여 해결해야 하는 문제이다.

해당 문제는, 주어진 문자열의 각 문자들을 주어진 숫자만큼 반복하여 출력하면 되는 간단한 문제이긴 하다.

다만 필자의 경우에선 문자 배열을 전역 변수로 선언하였다가 많이 헤매었던 기억이 있다.

전역 변수로 선언한 채 그대로 사용하면 이전 테스트 케이스의 잔여물(?)이 다음 테스트 케이스에 영향을 미칠 수 있다.

이 점을 유의하며 시도를 하면 어렵지 않게 해결할 수 있을 것이다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 테스트 케이스의 개수(n)를 입력받는다.

 

2) 테스트 케이스의 수만큼 반복문을 실행한다.

- 입력받을 문자 배열 s[]와 결과를 저장할 문자 배열 result[]을, 모든 배열값을 비워둔 채 선언한다.

- 각 문자를 반복할 횟수(r)와 문자열 s를 입력받는다.

- 반복문을 통해 각 문자를 반복해서 출력한다.

(여기서 j는 문자열의 개수만큼만 커지는 변수이며, k는 문자열의 개수에 r을 곱한 만큼만 커지는 변수이다.)

(j와 k가 각각 더해지며 문자가 저장되는데, k가 r에 나누어 떨어지면 j를 증가시켜 저장할 문자를 바꾼다.)

- 문자열 반복이 완료되면 최종적으로 저장된 result []를 출력한다.

 

3) 모든 테스트 케이스가 끝나면 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include <string.h>

//백준 2675번 코드
int main() {
	int n;
	scanf("%d", &n);
	int r;
	for (int i = 0; i < n; i++) {
		char s[25] = { 0 }, result[200] = { 0 };
		scanf("%d %s", &r, &s);
		int k = 0;
		for (int j = 0; j < strlen(s); j++) {
			while (k < r * strlen(s)) {
				result[k] = s[j];
				k++;
				if (k % r == 0) { break; }
			}
		}
		printf("%s\n", result);
	}
}

 

제출 결과

백준 BOJ 2675번 문자열 반복 문제 C 제출 결과

(2021.12.17 백준 2675번 문제 제출 결과)

(반례를 제때 찾지 못하면 일어나는 일)

반응형