#include <stdio.h>
int main(void)
{
char word[100+1];
int i, cnt = 0;
scanf("%s", word);
for (i = 0; word[i] != '\0'; i++, cnt++)
{
switch (word[i])
{
case '=':
case '-':
cnt--;
break;
case 'd':
if (word[i+1] == 'z' && word[i+2] == '=')
cnt--;
break;
case 'l':
case 'n':
if (word[i + 1] == 'j')
cnt--;
}
}
printf("%d", cnt);
return 0;
}

- switch문 사용
word[i]의 값이 몇 가지 경우 안에서 상수로 정해져 있기 때문에 switch문을 써서 코드를 단순화
if문을 쓸 경우 매번 조건문에 word[i]를 반복하게 된다. - Relational Expression(&&)
첫번째 expression이 fail하면 다음 조건을 검사하지 않는다.
순서만 잘지키면 word[i+2]에서 메모리에러가 날 일이 없다.- 패턴1 = 혹은 -로 끝날때
: =와 -는 일반적인 알파벳이 아니기 때문에 다른 조건체크 필요없이 바로 글자수 차감 - 패턴2 j로 끝날때
: j는 일반적인 알파벳이기 때문에 lj, nj 두가지 조합인지를 조건검사해야한다.
word[i]가 j일때 word[i-1]로 하지 않은 이유는 j로 시작하는 단어가 올 수도 있기 때문에 - 패턴3 dz=
: dz=은 세 글자가 하나의 글자로 취급되면서 =를 포함하고 있는 특수한 경우이다.
case 수행부 작성시 단순히 dz=이 올때 글자수를 -2차감하게 된다면, word[i]가 =을 검사할 때 다시 1을 차감하여 문제가 된다. 이를 고려해 -1만 차감한다.
- 패턴1 = 혹은 -로 끝날때
'문제풀이' 카테고리의 다른 글
[C언어] 백준 1712 손익분기점 (0) | 2021.12.24 |
---|---|
[C언어] 백준 1316 그룹 단어 체커 (0) | 2021.12.24 |
[C언어] 백준 5622 다이얼 (0) | 2021.12.22 |
[C언어] 백준 2908 상수 (0) | 2021.12.22 |
[C언어] 백준 1152 단어의 개수 (0) | 2021.12.22 |