문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
풀기전 로직 생각
처음에는 split함수를 구현해서 크로아티아 문자들로 나눠서 갯수를 세면 되겠다 하고 짜봤는데 문자열을 기준으로 나누기가 쉽지않아서 for문 노가다가 더 시간도 짧게 실행될거같다 생각해서 바꾸었습니다.
- 문자열을 입력받는다.
- 반복문으로 문자열을 한글자씩 검사한다.
- 크로아티아 문자에 해당하는지 검사하며 카운팅한다.
코드
#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;
}
결과
이상입니다.
'백준' 카테고리의 다른 글
[백준] 25206번 - 너의 평점은 C++ (0) | 2024.04.22 |
---|---|
[백준] 1316번 - 그룹 단어 체커 <C++> (0) | 2024.04.21 |
[백준] 27866번 - 문자와 문자열 (0) | 2024.04.08 |
[백준] 5597번 - 과제 안 내신분..? C++ (0) | 2024.04.07 |
[백준] 10813번 - 공바꾸기 C++ (0) | 2024.04.07 |