(C++) 백준 2941번 - 크로아티아 알파벳

코딩너구리·2025년 10월 21일

코딩 문제 풀이

목록 보기
44/266

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

문제

> 예전엔 운영체제에서 크로아티아 알파벳을 입력할 수 없어서 표처럼 변경해서 입력했다.
> 단어가 주어졌을 때, 몇개의 크로아티아 알파벳으로 이루어졌는지 출력해라.

접근

비교할 크로아티아 알파벳을 미리 정의 해주고 입력받은 문자열을 substr로 잘라 비교한다. 목록에 존재하면 크로아티아 알파벳의 개수를 누적하고 해당 알파벳의 글자 수 만큼 넘겨 다시 비교하고 출력한다.

문제해결

> 크로아티아 알파벳(cAlpha)를 문제에서 준대로 정의하고 비교할 문자열을 입력받는다.
> 일단 두자리 크로아티아 알파벳들과 입력받은 문자열을 두자리 substr해서 비교한다. 같은 알파벳이 존재하면 두자리 수를 넘어가기 위해 i+=1을 해준다.(for문에 i++이 있기때문에) 뒤에 세자리 짜리 알파벳과 비교하거나 크로아티아 알파벳이 아닌경우에 대해 실행여부를 위해 valid값을 갱신한다.
> valid가 true 즉, 두자리 중 같은게있다면 다음 문자열을 비교하고 false면 "dz="와 비교한다. 같다면 세글자라서 i+=2해주고 다르면 그냥 일반 알파벳이므로 i++가 있기 때문에 i에대한 추가적인 연산은 하지않는다.
> 누적된 cnt를 출력한다.

코드

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

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	vector<string> cAlpha = { "c=", "c-", "d-", "lj", "nj", "s=", "z=", "dz=" };
	string s;
	cin >> s;
	int cnt = 0;
	for (int i = 0; i < s.length(); i++)
	{
		bool valid = false;
		for (int j = 0; j < 7; j++)
		{
			if (s.substr(i, 2) == cAlpha[j])
			{
				cnt++;
				i+=1;
				valid = true;
			}
		}
		if (valid) continue;
		else 
		{
			if (s.substr(i, 3) == cAlpha[7])
			{
				cnt++;
				i += 2;
			}
			else
				cnt++;
		}
	}
	cout << cnt << '\n';
}

후기

0개의 댓글