티스토리 뷰
문제
KMP 알고리즘이 KMP인 이유는 이를 만든 사람의 성이 Knuth, Morris, Prett이기 때문이다. 이렇게 알고리즘에는 발견한 사람의 성을 따서 이름을 붙이는 경우가 많다.
또 다른 예로, 유명한 비대칭 암호화 알고리즘 RSA는 이를 만든 사람의 이름이 Rivest, Shamir, Adleman이다.
사람들은 이렇게 사람 성이 들어간 알고리즘을 두 가지 형태로 부른다.
- 첫 번째는 성을 모두 쓰고, 이를 하이픈(-)으로 이어 붙인 것이다. 예를 들면, Knuth-Morris-Pratt이다. 이것을 긴 형태라고 부른다.
- 두 번째로 짧은 형태는 만든 사람의 성의 첫글자만 따서 부르는 것이다. 예를 들면, KMP이다.
동혁이는 매일매일 자신이 한 일을 모두 메모장에 적어놓는다. 잠을 자기 전에, 오늘 하루 무엇을 했는지 되새겨보는 것으로 하루를 마감한다.
하루는 이 메모를 보던 중, 지금까지 긴 형태와 짧은 형태를 섞어서 적어논 것을 발견했다.
이렇게 긴 형태로 하루 일을 기록하다가는 메모장 가격이 부담되어 파산될 것이 뻔하기 때문에, 앞으로는 짧은 형태로 기록하려고 한다.
긴 형태의 알고리즘 이름이 주어졌을 때, 이를 짧은 형태로 바꾸어 출력하는 프로그램을 작성하시오.
입력
입력은 한 줄로 이루어져 있고, 최대 100글자의 영어 알파벳 대문자, 소문자, 그리고 하이픈 ('-', 아스키코드 45)로만 이루어져 있다. 첫번째 글자는 항상 대문자이다. 그리고, 하이픈 뒤에는 반드시 대문자이다. 그 외의 모든 문자는 모두 소문자이다.
출력
첫 줄에 짧은 형태 이름을 출력한다.
예제 입력
Knuth-Morris-Pratt
예제 출력
KMP
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | package string; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; /** * https://www.acmicpc.net/problem/2902 * KMP는 왜 KMP일까? * @author minjung * */ public class baekjoon_2902 { public static void main(String[] args) { // TODO Auto-generated method stub sc.init(); String longName = sc.readLine(); new baekjoon_2902().solve(longName); } private void solve(String longName) { System.out.print(longName.charAt(0)); // 첫글자 출력 for( int i = 1; i < longName.length(); i ++ ){ // 첫 글자 이후 for문 돌면서 if ( longName.charAt(i) == 45 ){ // '-'하이픈 다음대문자 출력('-'아스키코드 45) System.out.print(longName.charAt(i+1)); } } } static class sc { private static BufferedReader br; private static StringTokenizer st; static void init() { br = new BufferedReader(new InputStreamReader(System.in)); st = new StringTokenizer(""); } static String readLine() { try{ return br.readLine(); } catch (IOException e){ e.printStackTrace(); } return null; } static String next() { while (!st.hasMoreTokens() ){ try { st = new StringTokenizer(br.readLine()); } catch (IOException e){ e.printStackTrace(); } } return st.nextToken(); } static long nextLong() { return Long.parseLong(next()); } static int nextInt() { return Integer.parseInt(next()); } static double nextDouble() { return Double.parseDouble(next()); } } } | cs |
'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글
[정렬] BOJ_10814 단어 정렬 (0) | 2017.03.14 |
---|---|
[정렬] BOJ_1181 단어 정렬 (0) | 2017.03.13 |
[문자열 처리] BOJ_1475 방 번호 (0) | 2017.03.08 |
[문자열 처리] BOJ_1157 단어 공부 (0) | 2017.03.07 |
[문자열 처리] BOJ_10988 팰린드롬인지 확인하기 (0) | 2017.03.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- indexOf
- Spring
- sort
- java
- restfb
- DFS
- servlet
- AlertDialog.Builder
- REDIRECT
- mybatis
- boj
- jsp
- controller
- maven
- onPostExecute
- Baekjoon Online Judege
- algorithm
- INSERT
- table
- DP
- 안드로이드 스튜디오
- order by
- RequestMapping
- BFS
- 안드로이드 비콘
- 예외처리
- 이클립스
- onBackPressed
- 자바
- list
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함