Algorithm Trainning/백준 알고리즘(BEAKJOON)
백준 : 1316번, 그룹 단어 체커
newbie22
2021. 5. 2. 15:24
문제 주소 : www.acmicpc.net/problem/1316
정답 비율 : 52.503% (2021.05.02 14:48 기준)
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
문제 조건:
입력 : 단어의 개수 N와 N줄을 거쳐 N개의 단어 주어집니다. ( N : 1 ~ 100, 단어 길이 : 1 ~ 100)
출력 : 그룹 단어의 개수를 구하시오.
시간 : 2초
문제 풀이:
n번째 알파벳에 대하여 n - 1의 알파벳이랑 다를 때 이전에 나와있을 경우에만 그룹 단어가 아니라는 것을 판별할 수 있습니다.
예를들면 abba 이라는 문자열에 대하여
0 : a , 1 : b , 2 : b , 3 : a
에서 3번째 알파벳에 b에 대하여 이전 알파벳인 2번째 알파벳 b와 다른 상태에서 0번째에서 이미 a가 나타난적이 존재하므로 그룹 단어가 아니게 됩니다.
따라서 알파벳의 개수인 크기가 26 배열을 선언하여 알파벳의 나타남 여부를 저장하면서 쉽게 판별할 수 있습니다.
코드는 다음과 같습니다.
C99
// solve 1316
#include<stdio.h>
int main(void){
int tc = -1, result = 0;
char buf[101];
scanf("%d", &tc);
result = tc;
for (int i = 0; i < tc; i++) {
int check[26] = { 0, };
scanf("%s", buf);
for (int i = 0; buf[i] != '\0'; i++) {
if (check[buf[i] - 'a'] == 0)
check[buf[i] - 'a'] = 1;
else if (buf[i] != buf[i - 1]) {
result--;
break;
}
}
}
printf("%d", result);
return 0;
}