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

문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

풀기전 로직 생각

처음에는 split함수를 구현해서 크로아티아 문자들로 나눠서 갯수를 세면 되겠다 하고 짜봤는데 문자열을 기준으로 나누기가 쉽지않아서 for문 노가다가 더 시간도 짧게 실행될거같다 생각해서 바꾸었습니다.

  1. 문자열을 입력받는다.
  2. 반복문으로 문자열을 한글자씩 검사한다.
  3. 크로아티아 문자에 해당하는지 검사하며 카운팅한다.
코드

 

#include <iostream>

using namespace std;


int main(void) {

	string Cr;
	cin >> Cr;

	int count=0;
	for (int i = 0; i < Cr.length(); i++) {
		//if문으로 크로아티다 문자에 해당하는지 검사
		//if문들 안에 else들은 크로아티아 문자에 해당하지 않는데 조건문에 들어가버려서 count안된 그냥 영어들 카운팅
		if (Cr[i] == 'c') {
			if (Cr[i + 1] == '=' || Cr[i + 1] == '-') { //c=, c-검사
				count++;
				i++;
			}
			else
				count++;
		}
		else if (Cr[i] == 'd') {
			if (Cr[i + 1] == 'z' && Cr[i + 2] == '=') { //dz= 검사
				count++;
				i += 2;
			}
			else if (Cr[i + 1] == '-') {
				count++;
				i++;
			}
			else {
				count++;
			}
		}
		else if (Cr[i] == 'l') {
			if (Cr[i + 1] == 'j') {
				count++;
				i++;
			}
			else
				count++;
		}
		else if (Cr[i] == 'n') {
			if (Cr[i + 1] == 'j') {
				count++;
				i++;
			}
			else
				count++;
		}
		else if (Cr[i] == 's') {
			if (Cr[i + 1] == '=') {
				count++;
				i++;
			}
			else
				count++;
		}
		else if (Cr[i] == 'z') {
			if (Cr[i + 1] == '=') {
				count++;
				i++;
			}
			else
				count++;
		}
		else { //위 조건에 아무것도 해당하지않으면 그냥 단어
			count++;
		}
	}

	cout << count;
	
	return 0;
}

 

결과

 

이상입니다.