서의 공간

[백준] 2941_크로아티아 알파벳 본문

Algorithm/백준

[백준] 2941_크로아티아 알파벳

홍서의 2020. 12. 30. 23:05

2941번: 크로아티아 알파벳 (acmicpc.net)

 

1. 첫 번째 방법

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	
    // 첫 번째 방법
	string str;
	cin >> str;
	vector<string> strs = {
		"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };

	for (size_t i = 0; i < strs.size(); ++i)
		for (size_t pos = str.find(strs[i]); pos != string::npos; pos = str.find(strs[i]))
			str.replace(pos, strs[i].size(), "*");
	cout << str.size();
	return 0;
}

 

2. 두 번째 방법

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	
	string str;
	cin >> str;
	// 여기서 "00"을 더해준 이유는 아래 dz= 때문이다. i가 문자열의 맨 뒤인데,
	// if문에서 str[i+1] 또는 str[i+2]로 참조하면 안된다.
	// 따라서 임시로 00으로 문자열 더해주고 for문에서 str.length()-2로 조건을 주고 있다.
	str = str + "00";
	int ret = 0;
	for (int i = 0; i < str.length() - 2; ++i) {
		if (str[i] == 'c') {
			if (str[i + 1] == '=' || str[i + 1] == '-')
				i++;
		}
		else if (str[i] == 'd') {
			if (str[i + 1] == 'z' || str[i + 2] == '=')
				i += 2;
			else if (str[i + 1] == '-')
				i++;
		}
		else if (str[i] == 'l') {
			if (str[i + 1] == 'j')
				i++;
		}
		else if (str[i] == 'n') {
			if (str[i + 1] == 'j')
				i++;
		}
		else if (str[i] == 's') {
			if (str[i + 1] == '=')
				i++;
		}
		else if (str[i] == 'z') {
			if (str[i + 1] == '=')
				i++;
		}
		ret++;
	}
	cout << ret;
	return 0;
}

'Algorithm > 백준' 카테고리의 다른 글

[백준] 9375_패션왕 신해빈  (0) 2021.01.03
[백준] 1316_그룹 단어 체커  (0) 2020.12.30
[백준] 1629_곱셈  (0) 2020.12.11
[백준] 1697_숨바꼭질  (0) 2020.12.03
[백준] 4179_불!  (0) 2020.12.03
Comments