View

문제

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

 

2902번: KMP는 왜 KMP일까?

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

www.acmicpc.net

풀이

해석

문제 자체의 난이도도 브론즈2 수준으로 그닥 어렵진 않지만 이 문제를 포스팅하는 이유는 C++로 문자열을 잘라내는 것이 Python만큼 간단하게 되지 않기 때문이다. Python으로 이 문제를 푼다면 list(str.split('-'))으로 문자열을 분리해서 리스트로 묶어내고 각 첫 글자만 모아 출력하면 간단히 끝난다. 하지만 C++에서는 이렇게 문자열을 Split해주는 메서드가 지원되지 않기에 따로 구현을 해주어야 한다. 

위 코드에서는 따로 부분 문자열을 추출하지 않고 구분자(Delimeter: '-')의 위치를 찾아 이를 기준으로 답을 도출해 내었다.

만약 부분 문자열을 추출한다면 따로 <string>헤더의 string::substr()와 string::find()  함수들을 조합하여 반복문을 돌려서 구해야 한다. 

<string>의 함수들을 사용한다면 위처럼 하며, 찾아보니 <sstream>의 stringstream이나 istringstream 객체를 이용하는 방법들이 있는데 이는 C++ 자체의 입출력 관련 개념들과 객체들에 대한 이해가 필요로 해보여 일단은 내가 잘 알고 잘 쓸 수 있는 <string>쪽의 메서드 들로 구현해보았다. 

언젠가 입출력, 버퍼, 스트림에 대한 개념정리를 해야할 듯 싶다.

'BOJ > 문제풀이' 카테고리의 다른 글

[백준/C++] 1316 그룹단어 체커  (0) 2022.08.11
[백준/python] 1673 치킨 쿠폰  (0) 2022.08.11
[백준/python] 9012번: 괄호  (0) 2022.08.11
백준/C++14 2839번 설탕 배달  (0) 2022.08.11
Share Link
reply
«   2025/08   »
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