1. 문제 상세
https://www.acmicpc.net/problem/2941
2. 문제 접근
문자열을 입력받고 해당 문자열이 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
문자열의 크기만큼 반복하며 문자열의 앞에서부터 문자를 확인, 알파벳마다 카운트를 늘리자.
크로아티아 알파벳을 확인해야 하기 때문에 각 알파벳에 따라 조건을 두자.
문자 확인 중에 c 가 나온 경우, 바로 뒤의 문자가 = 혹은 - 인지 확인하고, 맞다면 카운트를 늘린 후 뒤의 문자를 건너뛰고
그 다음 문자를 확인한다.
d 도 비슷하게 뒤의 문자가 - 이거나, z 이면서 그 다음 문자가 = 인 경우를 확인하여 건너뛰도록 하자.
l 과 n 은 뒤의 문자가 j 인 경우, s 와 z 는 = 인 경우 건너뛰자.
반복이 끝나면 카운트를 출력한다.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int count = 0;
string s;
cin >> s;
for(int i = 0; i < s.length(); i++) {
if(s[i] == 'c' && (s[i + 1] == '-' || s[i + 1] == '=')) {
i++;
count++;
}
else if(s[i] == 'd' && s[i + 1] == '-') {
i++;
count++;
}
else if(s[i] == 'd' && s[i + 1] == 'z') {
if(s[i + 2] == '=') {
i += 2;
count++;
}
else {
i++;
count += 2;
}
}
else if((s[i] == 'l' || s[i] == 'n') && s[i + 1] == 'j') {
i++;
count++;
}
else if((s[i] == 's' || s[i] == 'z') && s[i + 1] == '=') {
i++;
count++;
}
else count++;
}
cout << count;
}
정수형 변수 count 를 선언하고 0으로 초기화, 문자열 객체 s 를 생성.
cin 으로 문자열을 입력받아 s 에 저장한다.
for문으로 i 가 0부터 s 의 길이보다 작을 때 1씩 더하며 반복하도록 한다.
반복에서는 if문으로 s 의 i 번 인덱스의 값이 'c' 이면서 s 의 i + 1 번 인덱스의 값이 '-' 또는 '=' 일때 count 에 1을 더하고 i 에도 1을 더한다.
else if문으로 위의 경우가 아닐 때 s 의 i 번 인덱스의 값이 'd' 이면서 s 의 i + 1 번 인덱스의 값이 '-' 일때 count 에 1을 더하고 i 에도 1을 더한다.
else if문으로 위의 경우가 아닐 때 s 의 i 번 인덱스의 값이 'd' 이면서 s 의 i + 1 번 인덱스의 값이 'z' 일때, 다시 if문으로 s 의 i + 2번 인덱스의 값이 '=' 라면 count 에 1을 더하고 i 에 2를 더한다.
'=' 문자가 아닌 경우 i 에 1을 더하고 count 에 2를 더한다.
else if문으로 위의 경우가 아닐 때 s 의 i 번 인덱스의 값이 'l' 또는 'n' 이면서 s 의 i + 1 번 인덱스의 값이 'j' 일때 count 에 1을 더하고 i 에도 1을 더한다.
else if문으로 위의 경우가 아닐 때 s 의 i 번 인덱스의 값이 's' 또는 'z' 이면서 s 의 i + 1 번 인덱스의 값이 '=' 일때 count 에 1을 더하고 i 에도 1을 더한다.
위의 경우들이 모두 아닌 경우 count 에 1을 더한다.
반복이 끝나면 count 를 출력한다.
4. 성능 확인
5. 마무리
.
'백준 - 단계별로 풀어보기 > 심화 1' 카테고리의 다른 글
[백준] 25206번 : 너의 평점은 | C++ (0) | 2023.10.12 |
---|---|
[백준] 1316번 : 그룹 단어 체커| C++ (0) | 2023.10.12 |
[백준] 1157번 : 단어 공부 | C++ (1) | 2023.10.11 |
[백준] 10988번 : 팰린드롬인지 확인하기 | C++ (0) | 2023.10.11 |
[백준] 2444번 : 별 찍기 - 7 | C++ (0) | 2023.09.26 |