BOJ | 2941번

10458 단어 백준파이썬cppcpp

Python 풀이

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로 치환한다는 뜻이다.

C++ 풀이

#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개의 문자를 잘라서 새로운 문자열을 만들라는 함수이다.

좋은 웹페이지 즐겨찾기