알고리즘/백준

[백준](중략)-21966 | C

kms0204 2022. 4. 16. 20:50
#include <stdio.h>
int main() {
	int n;
	char str[100001];
	scanf("%d %s", &n, str);
	if (n <= 25) {
		printf("%s", str);
		return 0;
	}
	for (int j = 11; j < n - 12; j++) {
		if (str[j] == '.') {
			for (int i = 0; i < 9; i++)
				printf("%c", str[i]);
			printf("......");
			for (int i = n - 10; i < n; i++)
				printf("%c", str[i]);
			return 0;
		}
	}

	for (int i = 0; i < 11; i++)
		printf("%c", str[i]);
	printf("...");
	for (int i = n - 11; i < n; i++)
		printf("%c", str[i]);
	return 0;
}

문자열의 길이 n과 문자열(str)을 입력받고, 아래의 규칙에 맞게 요약하는 문제이다.(2<=n<=100,000)

---<규칙>---

-문자열의 길이가 25 이하면 그대로 출력한다.

 

-문자열의 길이가 25 초과이면, 앞에서부터 11글자, 뒤에서부터 11글자를 제외하고 나머지 부분을 생각한다.

이 나머지 부분이 모두 같은 문장에 속한다면, 생략한 뒤 '...'('.' 3개)으로 바꿔서 출력한다.

 

-위 두 경우에 해당되지 않는다면 앞에서부터 9글자, 뒤에서부터 10글자만 남기고

    중간은 '......'('.' 6개)으로 바꿔서 출력한다.

 

 

 

 

사용자로부터 n과 str를 입력받는다.

 

만약 문자열의 길이(n)가 25 이하라면 printf()로 그대로 출력하고

return 0;을 통해 프로그램을 종료한다.

 

그렇지 않다면 문자열에서 앞에서부터 12번째부터 뒤에서부터 12글자까지 문자를 확인해 봐야하 하는데,

만약 같은 문장에 속했다면('.'가 나오지 않음) 앞, 뒤 부분을 '...'으로 생략하고 출력한다. 

그리고 return 0;으로 프로그램을 종료한다.

 

그렇지 않은 경우라면, 앞에서부터 9글자, 뒤에서부터 10글자만 남기고 나머지를 '......'으로 요약하여 출력한다.