croatia = ["c=","c-","dz=","d-","lj","nj","s=","z="] #크로아티아 문자 리스트 생성 s = input() #단어 입력 for c in croatia: if c in s: #c라는 문자가 크로아티아 문자리스트를 돌면서 입력한 단어 안에 있으면 s = s.replace(c,' ') #그 단어를 공백( )으로 바꾼다. print(len(s)) #단어 길이 출력
문제에서 표에 있는 크로아티아 문자들을 하나의 문자로 본다고 하였으니
replace
함수에서 길이가 1짜리인 아무 문자나 입력하면 된다. 공백도 되고 '*', '&', '^' 등등... '-'나 '='는 혹시나 변환된 후 다시 크로아티아 문자로 인식될 수도 있으니 안쓰는게 낫다.
아무튼 replace(a,b)
라는 함수는 a라는 문자열을 b로 치환한다는 뜻이다.
#include <string> #include <iostream> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); string S; int answer = 0; cin >> S; for (int i = 0; i < S.size(); i++) { if (S.substr(i, 2) == "c=" || S.substr(i, 2) == "c-" || S.substr(i, 2) == "d-" || S.substr(i, 2) == "lj" || S.substr(i, 2) == "nj" || S.substr(i, 2) == "s=" || S.substr(i, 2) == "z=") { answer++; S[i] = ' '; S[i + 1] = ' '; } else if (S.substr(i, 2) == "dz") { if (S[i + 2] == '=') { answer++; S[i] = ' '; S[i + 1] = ' '; S[i + 2] = ' '; } } } for (char a : S) { if (a!=' ') answer++; } cout << answer; }
파이썬을 공부하며 백준을 다시 풀어보는데 예전에 C++17로 풀었던 코드는 진짜 못풀었다는 생각이 든다...
잡담은 다음에 하고, substr(i, num)
이라고 되어있으면 i번째 인덱스부터 시작하여 num개의 문자를 잘라서 새로운 문자열을 만들라는 함수이다.