https://www.acmicpc.net/problem/21966
21966번: (중략)
알파벳 대문자, 알파벳 소문자, 쉼표, 마침표의 아스키 코드는 각각 65-90, 97-122, 44, 46이다.
www.acmicpc.net
문제
드높은 남산 위에 우뚝 선
(중략)
세워라 반석 위에
선린의 터를
1개 이상의 문장들이 주어진다. 아래 규칙에 따라 문장들의 중간 부분을 적당히 생략해 25글자 이내로 요약해서 출력하는 프로그램을 작성하자.
단, 입출력의 편의를 위해 문장들을 공백 없이 모두 붙여 구성한 문자열 가 대신 주어진다. 문자열의 첫 글자부터 가장 먼저 만나는 '.'(마침표)까지, 그리고 각 '.'의 다음 글자부터 가장 먼저 만나는 '.'까지를 한 문장으로 생각하기로 하자. 예를 들어 주어진 문자열 가 'IamInevitable.IamIronMan.'이라면 'IamInevitable.'이 한 문장, 'IamIronMan.'이 한 문장이다.
규칙은 다음과 같다.
- 를 그대로 출력한다. 의 길이가 25 이하면
- 의 앞에서부터 11글자, 뒤에서부터 11글자를 제외하고 나머지 부분을 생각하자. 이 나머지 부분이 모두 같은 문장에 속한다면, 생략한 뒤 '...'('.' 3개)으로 바꿔서 출력한다. 의 길이가 25 초과이면,
- 위 두 경우에 해당되지 않는다면 를 앞에서부터 9글자, 뒤에서부터 10글자만 남기고 중간은 '......'('.' 6개)으로 바꿔서 출력한다.
입력
첫 번째 줄에 문자열의 길이 이 주어진다.
두 번째 줄에는 글자로 이루어진 문자열 가 주어진다.
출력
문제에서 제시된 규칙에 따라 를 25글자 이내로 요약해서 출력한다.
제한
문자열 는 알파벳 대문자, 알파벳 소문자, 쉼표(,), 마침표(.)로만 구성되어 있다.
문자열 의 첫 글자는 마침표(.)가 아니다.
문자열 의 마지막 글자는 마침표(.)이다.
예제 입력
예제 입력 1 | 예제 입력 2 | 예제 입력 3 |
11 IamIronMan. |
26 And,IamIronMan.IamIronMan. |
29 IamInevitable.And,IamIronMan. |
코드
# 21966번
from sys import stdin
r_line = stdin.readline
n = int(r_line())
a = r_line().rstrip()
cnt = 0
result = 0
substitution = '...'
if n <= 25: #문자열의 길이가 25 이하면 ==> 그대로 출력
print(a)
else: # 25 초과면
temp = a[11:-11]
for i in range(len(temp)):
if temp[i] == '.': # 점이라면
cnt += 1
if cnt >= 2:
break
if (cnt==1 and temp[-1]=='.') or cnt==0: # 점 갯수가 0개라면 무조건 같은문장
result = 1
if result==0:
print(a[0:9] + substitution*2 + a[-10:])
else:
print(a[0:11] + substitution + a[-11:])
# print(a[0:11]) # 앞 11글자
# print(a[-11:]) # 뒤 11글자
# print(a[11:-11]) # 전체글자에서 11글자앞뒤 제외
풀이
남겨진 문자열을 for문으로 1개씩 검사한다.
핵심은 점의 개수를 인지해보는 것이다.
1) 점이 0개 라면
나머지문장은 무조건 (한 문장)에 해당한다.
왜냐하면 앞문장이든 뒷문장이든 같은 문장에 해당한다 이유는 문제에 명시되어 있다.
문자열의 첫 글자부터 가장 먼저 만나는 '.'(마침표)까지, 그리고 각 '.'의 다음 글자부터 가장 먼저 만나는 '.'까지를 한 문장으로 생각하기로 하자. |
라고 되어있기 때문이다.
2) 점이 1개 라면
그 점은 무조건 나머지문장 마지막번호에 저장이 되어있어야 한다.
그래야 같은 문장에 해당한다.
3) 점이 2개 이상이라면
나머지문장은 새로운 문장이 이미 1개 이상존재하기 때문에 같은 문장에 해당될 수 없다.
'Programming > Algorithm(Python)' 카테고리의 다른 글
[백준/python][dp] 백준 13703번 - 물벼룩의 생존확률 (0) | 2023.09.01 |
---|---|
[백준/python][브루트포스] 백준 1018번 - 체스판 다시 칠하기 (0) | 2023.09.01 |
[백준/python][dp] 22968번 - 균형 (0) | 2023.09.01 |
[백준/python][그래프] 2606번 - 바이러스 (0) | 2023.09.01 |
[백준/python][그리디] 20115번 - 에너지 드링크 (0) | 2023.09.01 |