Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 입력 버퍼
- Process Communication
- 10773
- 바샤
- Parenthesis
- 시스템 프로그래밍
- file IO
- c++
- process control
- 브런치
- The Balance of the World
- BAKA
- 해바
- QA
- Zero That Out
- Baekjoon
- 1874
- 5622
- 전자책
- system programming
- c
- 시프
- 4949
- 균형잡힌 세상
- 백준
- IT
- 2941
- LJESNJAK
- For Beginners
- File 조작
Archives
- Today
- Total
해바
2941) 7. 문자열 : 크로아티아 알파벳(LJESNJAK) 본문
문제
https://www.acmicpc.net/problem/2941
2941번: 크로아티아 알파벳
문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고,
www.acmicpc.net
풀이
이전 문제들처럼 배열을 쓰지 않고 해 보려고 고집을 부려서 삽질을 정말 많이 했다. 일일이 조건을 만들다가, c, d, l, n, s, z 구분하기 위해 check라는 int 변수를 만들어서 경우에 따라 2, 1, -1, -2 이렇게 나눠서 또 각 경우에 따른 조건을 만들다가, 나중엔 문자부터 구분할까 check값부터 구분할까 삽질하고...
그렇게 하다 생각해보니 이짓을 할 거면 배열을 쓰는 게 낫겠다는 생각이 들어 벡터를 썼다. 벡터는 메모리 누수가 없는 건지 구글에서 관련한 것들은 대부분 동적자료로 벡터를 만들었을 때의 경우라 반복문 돌리며 delete 하는 방식으로 해제하고, 스택오버플로우에선 걱정할 필요 없다고 한다. 나중에 다시 정독해봐야겠다.
#include "cstdio"
#include "vector"
// c=, c-, dz=, d-, lj, nj, s=, z=
int main() {
int count(0);
char alp('\0');
std::vector<char> str('\0');
for(int i(0); alp != '\n'; i++) {
alp = getchar();
if(alp == '\n') break;
str.push_back(alp);
switch (str[i]) {
case 'j':
// lj, nj 일 때
if(!(str[i - 1] == 'l' || str[i - 1] == 'n')) count++;
break;
case '-':
// c-, d- 일 때
if(!(str[i - 1] == 'c' || str[i - 1] == 'd')) count++;
break;
case '=':
// c=, dz=, s=, z= 일 때
if(str[i - 1] == 'z' && str[i - 2] == 'd') count--;
else if(str[i - 1] == 'z' || str[i - 1] == 'c' || str[i - 1] == 's') continue;
else count++;
break;
default:
// 해당없는 문자들
count++;
break;
}
}
printf("%d\n", count);
return 0;
}
'C, C++' 카테고리의 다른 글
10828) 15. 스택 : 스택 (0) | 2019.08.18 |
---|---|
1316) 7. 문자열 : 그룹 단어 체커 (0) | 2019.08.17 |
5622) 7. 문자열 : 다이얼(BAKA) (0) | 2019.08.15 |
2908) 7. 문자열 : 상수(FILIP) (0) | 2019.08.14 |
1152) 7. 문자열 : 단어의 개수 (0) | 2019.08.14 |
Comments