문제 출처: www.acmicpc.net/problem/2941
1. 코드
#include <stdio.h>
#include <string.h>
int main(void)
{
char arr[100];
int i, j, sum;
scanf("%s", arr);
sum = strlen(arr);
for(j = 0; j < strlen(arr); j++)
{
if((arr[j] == 'l' || arr[j] == 'n') && arr[j+1] == 'j')
sum--;
if(arr[j] == 'd' && arr[j+1] == 'z' && arr[j+2] == '=')
sum--;
if(arr[j] == '=' || arr[j] == '-')
sum--;
}
printf("%d", sum);
}
2. 문제 해결 방식
입력된 문자의 개수에서 조건에 해당하는 것을 제외시킨 방법이다. 첫 번째 조건은 'lj'와 'nj'가 입력되어 있을 때 총개수에서 1을 뺀다. 그리고 두 번째 조건은 'dz='이 입력되었을 때 1만 빼는데 'dz='같은 경우에는 3글자가 1글자가 되니 2개를 빼야 한다고 생각이 들 텐데 코드를 조금이라도 줄이기 위해 세 번째 조건을 살펴보자.
세 번째 조건은 '=' 혹은 '-'가 입력이 된다면 1을 뺀다. 그렇다면 다시 두 번째 조건으로 돌아가 보자. 두 번째 조건에서는 3글자가 1글자가 되는데 우선 거기서 1을 빼고 'dz=' 같은 경우에 '='이 포함되어 있기에 한 번 더 1이 빼 진다. 그렇기에 총 2라는 수가 빼지는 것이다. 그리고 세 번째 조건을 통해 'c='과 'c-', 'd-', 's=', 'z=' 등을 1씩 뺄 수 있다.
3. 느낀 점
나 같은 경우에는 문자열을 입력 후 문자 개수를 입력하여 조건에 해당하는 것을 제외시켰는데 다른 사람들은 어떠한 생각을 가지며 어떤 코드를 짰는지 궁금해졌다. 내 방식이 매우 단순하기 때문에 나와 다른 색다른 방법에 대해서 알고 싶다. 일단 내가 생각한 것은 이것인데 아무리 생각해도 이것밖에 떠오르지 않기 때문이다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1712번: 손익분기점 C언어 (실패) (0) | 2020.01.06 |
---|---|
백준 알고리즘 1316번: 그룹 단어 체커 C언어 (0) | 2020.01.05 |
백준 알고리즘 5622번: 다이얼 C언어 (0) | 2020.01.01 |
백준 알고리즘 2908번: 상수 C언어 (0) | 2019.12.29 |
백준 알고리즘 1152번: 단어의 개수 C언어 (4) | 2019.12.28 |