본문 바로가기
백준

[백준] 2902번 : KMP는 왜 KMP일까? – JAVA [자바]

by Hongwoo 2022. 4. 18.
반응형

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

 

2902번: KMP는 왜 KMP일까?

입력은 한 줄로 이루어져 있고, 최대 100글자의 영어 알파벳 대문자, 소문자, 그리고 하이픈 ('-', 아스키코드 45)로만 이루어져 있다. 첫 번째 글자는 항상 대문자이다. 그리고, 하이픈 뒤에는 반드

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 2902번 KMP는 왜 KMP일까?는 브론즈 2 난이도의 구현 및 문자열 문제이다. 이 문제에서는 입력으로 한 줄의 문자열이 주어진다. 이 문자열은 이름이고 이름 사이사이가 하이픈으로 나누어져 있다. 그리고 각 이름의 첫 글자를 합쳐서 출력만 하면 된다.

 

이 문제는 StringTokenizer로 쉽게 풀 수 있다. Tokenizer는 토큰화 한다라는 뜻이다. 그리고 여기서 토큰은 분리된 문자열 조각이라고 생각할 수 있다. 즉, StringTokenizer는 문자열을 여러 개의 문자열 조각으로 나누는 클래스이다. 보통은 문자열이라 스페이스로 나누어져 있을 때 다음과 같이 쓰면 된다. 

 

String str = "Hello World for String Tokenizer";
StringTokenizer st = new StringTokenizer(str);

String token1 = st.nextToken(); //"Hello"
String token2 = st.nextToken(); //"World"
String token3 = st.nextToken(); //"for"
String token4 = st.nextToken(); //"String"
String token5 = st.nextToken(); //"Tokenizer"

 

하지만 이번 문제에서는 문자열이 하이픈 (-)으로 나누어져 있다. 이럴 경우 StringTokenizer의 다음과 같은 생성자를 사용하면 된다.

 

StringTokenizer st = new StringTokenizer(문자열, 구분자)

 

여기서 구분자는 하이픈(-)이 되겠다. 따라서, 다음과 같이 코드를 쓰면 하이픈으로 나누어진 문자열을 쪼갤 수 있다. 

 

StringTokenizer st = new StringTokenizer(str, "-");

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), "-");
        StringBuilder sb = new StringBuilder();
        while (st.hasMoreTokens()) {
            sb.append(st.nextToken().charAt(0));
        }
        System.out.print(sb);
    }
}

 


  • 후기

StringTokenizer만 알면 쉽게 접근할 수 있는 문제였다.

 

반응형

댓글