본문 바로가기

알고리즘!

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

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

č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

출력

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

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

int main() {
	string input;
	int count = 0;
	char cro[][10] = {"c=","c-","dz=","d-","lj","nj","s=","z="};
	cin >> input;
	for (auto i : cro) {
		while (input.find(i) != string::npos) {
			input.replace(input.find(i), strlen(i), "0");
			count++;
		}
	}
	for (auto i : input) {
		if (i > 96 && i < 123)
			count++;
	}
	cout << count << endl;
}

python의 replace처럼 한번에 바꾸는 함수가 없는것같아 구현을 했다.

while문을 통해 크로아티아 알파벳을 계속해서 0으로 바꿔준다. find에서 찾지 못했을 경우 std::string::npos를 반환하기 while문 조건을 저렇게 썼고 만약 찾으면 해당 크로아티아 알파벳을 문자0으로 바꿔주고 count를 늘리게 된다.

크로아티아 알파벳을 제외한 일반 알파벳들만 남았으므로 알파벳 소문자만 count해줘서 크로아티아 알파벳의 갯수를 출력하게 된다.

'알고리즘!' 카테고리의 다른 글

백준 1018번-체스판 다시 칠하기  (0) 2019.07.05
백준 1065번-한수  (0) 2019.07.03
백준 4344번-평균은 넘겠지  (0) 2019.06.27
백준 1546번-평균  (0) 2019.05.27
백준 1924번-2007년  (0) 2019.05.24