
#2941: 크로아티아 알파벳
[문제]
[코드]
#include <stdio.h>
#include<string.h>
int main()
{
char croatia[101];
int count = 0;
int i;
scanf("%s", &croatia);
for (i = 0; i < strlen(croatia)-1; i++)
{
if (croatia[i] == 'c')
{
if (croatia[i + 1] == '=')
i++;
else if (croatia[i + 1] == '-')
i++;
}
else if (croatia[i] == 'd')
{
if (croatia[i + 1] == '-')
i++;
else if (croatia[i + 1] == 'z')
if (croatia[i + 2] == '=')
i += 2;
}
else if (croatia[i] == 'l' || croatia[i] == 'n')
{
if (croatia[i + 1] == 'j')
i++;
}
else if (croatia[i] == 's' || croatia[i] == 'z')
{
if (croatia[i + 1] == '=')
i++;
}
count++;
}
if (i == (strlen(croatia) - 1))
count++;
printf("%d\n", count);
return 0;
}
[코드설명]
크로아티아 알파벳 표를 보면 알파벳을 c, d, l 또는 n, s 또는 z로 분류할 수 있다.입력 받은 문자열을 처음부터 마지막 문자까지 하나씩 읽어가는데, 문자가 c이면 그 다음 문자를 확인해서 '='이거나 '-'임을 확인한다. 이때 if문이 참이면 인덱스가 증가된 후 모든 if문을 빠져나와 count가 증가하게 된다. 다른 분류도 마찬가지이다. 다만 d에서는 dz= 문자가 있기 때문에 인덱스를 2증가시켜야 하는 점을 유의해야 한다.마지막으로 문자열을 다 읽고 빠져나오는데 if문으로 인덱스를 확인한 후 count를 증가시켜주는 코드가 있다. 이 코드를 넣은 이유는 for문의 조건식이 i < strlen(croatia)일 때 문자열 마지막에 크로아티아 표에 나오지 않은 알파벳이 나왔을 경우 if문에서 잘못된 인덱스를 참조하기 때문이다. 이를 해결하기 위해 for문의 조건식을 i < strlen(croatia)-1로 바꿨다. 여기서 마지막 문자가 크로아티아 알파벳인 경우에는 반복문 종료후 인덱스가 strlen(croatia)이지만, 일반 알파벳인 경우 strlen(croatia)-1이기 때문에 if문으로 인덱스 검사를 해서 count를 증가시켜줬다.
[채점 결과]
#2884: 알람 시계
[문제]
[코드]
#include<stdio.h>
int main()
{
int hour, min;
scanf("%d %d", &hour, &min);
if (min >= 45)
printf("%d %d\n", hour, min - 45);
else
printf("%d %d\n", hour == 0 ? 23 : hour - 1, min + 15);
return 0;
}
[코드설명]
min이 45보다 크거나 같을 땐 min에서 45만 빼주었고, 45보다 작을 때는 min에 15를 더해줬다. 총 빼야할 45분에서 min을 빼고 남은 시간을 60에서 빼주어야 하는데 이것을 식으로 간소화 하면 min+15가 된다. 이때 hour는 0이면 23을 출력하고 0이 아니면 hour에서 1을 뺀 값을 출력한다.
[채점 결과]
'알고리즘' 카테고리의 다른 글
[BOJ] 1316/2869 (0) | 2021.02.07 |
---|---|
[BOJ] 2748/2750 (0) | 2021.02.01 |
[BOJ] 1037/1712 (0) | 2021.01.19 |
C 과제 1/2 (0) | 2021.01.11 |
[BOJ] 10809/10773 (0) | 2021.01.07 |