본문 바로가기
Algorithm/Baekjoon

Baekjoon 21966 (중략) JAVA

by Hunveloper 2022. 6. 9.
728x90

 

21966번: (중략)

알파벳 대문자, 알파벳 소문자, 쉼표, 마침표의 아스키 코드는 각각 65-90, 97-122, 44, 46이다.

www.acmicpc.net

문제

드높은 남산 위에 우뚝 선

(중략)

세워라 반석 위에

선린의 터를

1개 이상의 문장들이 주어진다. 아래 규칙에 따라 문장들의 중간 부분을 적당히 생략해 25글자 이내로 요약해서 출력하는 프로그램을 작성하자.

단, 입출력의 편의를 위해 문장들을 공백 없이 모두 붙여 구성한 문자열 S가 대신 주어진다. 문자열의 첫 글자부터 가장 먼저 만나는 '.'(마침표)까지, 그리고 각 '.'의 다음 글자부터 가장 먼저 만나는 '.'까지를 한 문장으로 생각하기로 하자. 예를 들어 주어진 문자열 S가 'IamInevitable.IamIronMan.'이라면 'IamInevitable.'이 한 문장, 'IamIronMan.'이 한 문장이다.

규칙은 다음과 같다.

  1.  S의 길이가 25 이하면 S를 그대로 출력한다.
  2.  S의 길이가 25 초과이면, S의 앞에서부터 11글자, 뒤에서부터 11글자를 제외하고 나머지 부분을 생각하자. 이 나머지 부분이 모두 같은 문장에 속한다면, 생략한 뒤 '...'('.' 3개)으로 바꿔서 출력한다.
  3. 위 두 경우에 해당되지 않는다면 S를 앞에서부터 9글자, 뒤에서부터 10글자만 남기고 중간은 '......'('.' 6개)으로 바꿔서 출력한다.
입력

첫 번째 줄에 문자열의 길이 N이 주어진다.

두 번째 줄에는 N글자로 이루어진 문자열 S가 주어진다.

출력

문제에서 제시된 규칙에 따라 S를 25글자 이내로 요약해서 출력한다.

풀이

1. 입력된 문자열의 길이가 25 이하라면 그대로 출력

2. String t를 substring을 이용하여 12번째 글자부터 뒤에서 12번째 글자까지 잘라서 넣는다.

    이렇게 만들어진 문장안에 '.'이 없다면 모두 같은 문장에 속하기에 생략한 뒤 ...으로 바꿔서 출력

3. 위 두 경우에 해당하지 않으면 substring을 이용하여 0부터 9까지 글자와 ...... 와 마지막 10글자를 합쳐서 출력한다.

코드
import java.io.*;

public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int n=Integer.parseInt(br.readLine());
		String s=br.readLine();
		if(n<=25) {
			sb.append(s);
		}
		else {
			String t=s.substring(12,n-12);
			if(t.indexOf('.')==-1)
				sb.append(s.substring(0,11)+"..."+s.substring(n-11));
			else
				sb.append(s.substring(0,9)+"......"+s.substring(n-10));
		}
		System.out.println(sb.toString());
	}
}

 

728x90
728x90

'Algorithm > Baekjoon' 카테고리의 다른 글

Baekjoon 4101 크냐? JAVA  (0) 2022.06.09
Baekjoon 3613 Java vs C++ JAVA  (0) 2022.06.09
Baekjoon 2506 점수계산 JAVA  (0) 2022.06.09
Baekjoon 24883 자동완성 JAVA  (0) 2022.06.08
Baekjoon 9076 점수 집계 JAVA  (0) 2022.06.08

댓글