본문 바로가기
Problem Solving

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

by tls1107 2021. 7. 25.
728x90
반응형


문제 풀기 전 생각 : 

/*
먼저 크로아티아 알파벳인지 아닌지 판별하는 함수를 만든다.
문자열로 입력받은후 두 글자씩 위의 함수에 넣는다. 
만약 크로아티아 알파벳 이라면 카운트를 1 증가하고 다음 글자를 패스한다.
예외로 dz= 는 세글자 이기 때문에 dz=일 경우 다음 두 글자를 패스한다.
만약 크로아티아 알파벳이 아니라면 그냥 카운트만 1 증가시킨다.
마지막에 카운트를 출력한다.
*/

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

int iscroi(string s){
  string croi[8] = {"c=","c-","dz","d-","lj","nj","s=","z="};
  for(int i=0 ; i<8 ; i++){
    if(s == croi[i]){
      if(s == "dz") return 2;
      else return 1;
    }
  }
  return 0;
}

int main() { 
  int count = 0;
  string s;
  cin >> s;
  for(int i=0 ; i<s.length() ; i++){
    if(iscroi(s.substr(i,2)) > 0 ){
      if(iscroi(s.substr(i,2)) == 1) i++;
      else if(s[i+2] == '=') i+=2;
    } 
    count++;
  }
  cout << count;
  return 0; 
}

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

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net


풀 때 어려웠던 점 또는 느낀점 :

어려웠던 점은 없었던것 같고.

크로아티아 알파벳은 나랑 맞지 않다는 사실을 알 수 있었다. 


개선방안 :

#include <stdio.h>
#include <string.h>

int main(void) {
	int i,sum=0;
	char S[100];
	scanf("%s",S);
	sum=strlen(S);
	for(i=0;i<strlen(S);i++){
		if((S[i]=='l'||S[i]=='n')&&S[i+1]=='j')
			sum--;
		else if(S[i]=='d'&&S[i+1]=='z'&&S[i+2]=='=')
			sum--;
		else if(S[i]=='='||S[i]=='-')
			sum--;
	}
	printf("%d",sum);
}

위의 코드는 입력받은 글자수를 저장해놓고

크로아티아 알파벳을 만날때마다 글자수를 1씩 감소시켰다.

그리고 조건문이나 과정이 간편하게 짠 코드인것 같다.

728x90
반응형

댓글