https://www.acmicpc.net/problem/2941
문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳변경
č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
예제 입력 1
ljes=njak
예제 출력 1
6
예제 입력 2
ddz=z=
예제 출력 2
3
예제 입력 3
nljj
예제 출력 3
3
예제 입력 4
c=c=
예제 출력 4
2
많이 해멨던 문제이다. 실버문제 각잡고 풀어본건 처음이었음.
처음에 C= 등을 각각의 ASCII 코드값을 구해서 더해서 OVERFLOW 초과하는 값을 가지고 하려고 그랬는데 어림도없었고.
그냥 IF 문을 이용해서 풀었다.
//c=,c-,dz=,d-,lj,nj,s=,z=
//ljes=njak > 6
#include <stdio.h>
#include <string.h>
int main(void){
char arr[101]={0,};
fgets(arr,102,stdin);
//printf("%s",arr);
int i, temp=0, alphabet=strlen(arr)-1;
//printf("%d\n",alphabet);
for(i=0;i<strlen(arr)-1;i++)
{
if(arr[i]=='c')
{
if(arr[i+1]=='='||arr[i+1]=='-')
{
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
alphabet--;
}
}
if(arr[i]=='d')
{
if(arr[i+1]=='z')
{
if(arr[i+2]=='=')
{
alphabet--;
alphabet--;//분리된것으로 안본다함.
//printf("\n__%c, %c__, %c__",arr[i],arr[i+1],arr[i+2]);
}
}
}
if(arr[i]=='d')
{
if(arr[i+1]=='-')
{
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
alphabet--;
}
}
if(arr[i]=='l')
{
if(arr[i+1]=='j')
{
alphabet--;
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
}
}
if(arr[i]=='n')
{
if(arr[i+1]=='j')
{
alphabet--;
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
}
}
if(arr[i]=='s')
{
if(arr[i+1]=='=')
{
alphabet--;
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
}
}
if(arr[i]=='z')
{
if(arr[i+1]=='=')
{
if(arr[i-1]=='d')
{
continue;
}
else{
alphabet--;
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
}
}
}
}
printf("%d",alphabet);
return 0;
}
#include <stdio.h>
#include <string.h> //strlen 쓰기위해선 필수.
int main(void){
char arr[101]={0,}; //101칸 선언해주고
fgets(arr,102,stdin); //101칸에 널문자 하나 더 추가해서 널널하게 입력받고
//printf("%s",arr);
int i, temp=0, alphabet=strlen(arr)-1;
//printf("%d\n",alphabet);
for(i=0;i<strlen(arr)-1;i++) //strlen 만큼 포문 돌면서
{
if(arr[i]=='c') //c 일때 면서
{
if(arr[i+1]=='='||arr[i+1]=='-') // = 거나 - 를 받아갈때
{
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
alphabet--; //그러면 = or - 를 글자로 세면 안되니 알파벳에서 1을 빼준다.
}
}
if(arr[i]=='d')
{
if(arr[i+1]=='z')
{
if(arr[i+2]=='=')
{
alphabet--; //여기선 두개빼주는데, 알파벳엔 d + z + = 이렇게 세개가 포함되어 있기에 하나 빼주고
alphabet--;//하나 더 빼준다. 저 세개를 하나로 센다.
//printf("\n__%c, %c__, %c__",arr[i],arr[i+1],arr[i+2]);
}
}
}
if(arr[i]=='d')
{
if(arr[i+1]=='-')
{
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
alphabet--;
}
}
if(arr[i]=='l')
{
if(arr[i+1]=='j')
{
alphabet--;
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
}
}
if(arr[i]=='n')
{
if(arr[i+1]=='j')
{
alphabet--;
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
}
}
if(arr[i]=='s')
{
if(arr[i+1]=='=')
{
alphabet--;
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
}
}
if(arr[i]=='z')
{
if(arr[i+1]=='=')
{
if(arr[i-1]=='d') //위에 dz= 에서 z=를 인식해서 두번빼는 대참사가 일어나기에
{
continue; //컨티뉴로 나와준다.
}
else{
alphabet--;
//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
}
}
}
}
printf("%d",alphabet);
return 0;
}
'_BOJ > _C , C++' 카테고리의 다른 글
BOJ_18269 : Where Am I?_ USACO 2019 December Contest > Bronze (0) | 2020.04.09 |
---|---|
BOJ_18268 : COW GYMNASTICS, 소체조 (0) | 2020.03.27 |
BOJ_2798 : 블랙잭 C (0) | 2020.03.17 |
BOJ_1085 : 직사각형에서 탈출 C (0) | 2020.03.11 |
[백준] BOJ_5622:다이얼 C (0) | 2020.02.23 |