반응형
문제
KMP 알고리즘이 KMP인 이유는 이를 만든 사람의 성이 Knuth, Morris, Prett이기 때문이다. 이렇게 알고리즘에는 발견한 사람의 성을 따서 이름을 붙이는 경우가 많다.
또 다른 예로, 유명한 비대칭 암호화 알고리즘 RSA는 이를 만든 사람의 이름이 Rivest, Shamir, Adleman이다.
사람들은 이렇게 사람 성이 들어간 알고리즘을 두 가지 형태로 부른다.
- 첫 번째는 성을 모두 쓰고, 이를 하이픈(-)으로 이어 붙인 것이다. 예를 들면, Knuth-Morris-Pratt이다. 이것을 긴 형태라고 부른다.
- 두 번째로 짧은 형태는 만든 사람의 성의 첫글자만 따서 부르는 것이다. 예를 들면, KMP이다.
동혁이는 매일매일 자신이 한 일을 모두 메모장에 적어놓는다. 잠을 자기 전에, 오늘 하루 무엇을 했는지 되새겨보는 것으로 하루를 마감한다.
하루는 이 메모를 보던 중, 지금까지 긴 형태와 짧은 형태를 섞어서 적어논 것을 발견했다.
이렇게 긴 형태로 하루 일을 기록하다가는 메모장 가격이 부담되어 파산될 것이 뻔하기 때문에, 앞으로는 짧은 형태로 기록하려고 한다.
긴 형태의 알고리즘 이름이 주어졌을 때, 이를 짧은 형태로 바꾸어 출력하는 프로그램을 작성하시오.
출처:https://www.acmicpc.net/problem/2902
문제 해결 과정:
- 문제를 간략화 하면 대문자이 숫자만 출력하면된다.
- 아스키코드표에서 알파벳 대문자는 45에서 90사이이다. 만약 어떠한 문자의 값이 45와 90사이라면 츨력한다.
- 문자열을 String으로 받고<stirng>라이브러리의 at함수를 이용하여 하나씩 체크한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<iostream> #include<string> using namespace std; int main() { string s; cin >> s; for (int i = 0; i < s.length(); i++) { char temp = s.at(i); if (65 <= temp && temp <= 90) { cout << temp; } } cout << endl; } | cs |
반응형
'알고리즘' 카테고리의 다른 글
<백준> 2217번 로프 (0) | 2018.01.13 |
---|---|
<백준> 1764번 듣보잡 (0) | 2018.01.12 |
<백준> 11724번 연결 요소의 개수 (0) | 2018.01.08 |
<백준> 2667번 단지번호붙이기 (0) | 2018.01.06 |
<백준>2743번 단어의 길이 (0) | 2018.01.05 |