DINGA DINGA
728x90

https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

 

코드

#include <stdio.h>
#include <string.h>

int check(char arr[]) {					//그룹 단어인지 판단하는 함수
	for (int i = 0; i < strlen(arr); i++) {		//단어의 길이만큼 반복,
		for (int j = 0; j < strlen(arr); j++) {	//단어의 문자별로 판단
			if (arr[i] == arr[j])		//해당 문자와 같은 문자가 있고,
				if (j - i > 1)		//해당 문자와 중복된 문자 사이의 거리가 1보다 크고,
					if (arr[j - 1] != arr[j])	//중복된 문자가 연속되어 있지 않으면
						return 0;		//그룹 단어가 아니므로 0을 리턴
		}
	}
	return 1;				//그룹 단어라면 1을 리턴
}

main() {
	int n, sum = 0;				//n: 단어의 개수, sum: 그룹 단어의 개수
	char arr[100];				//단어의 최대 길이가 100이므로 배열 크기를 100으로 저장
	scanf("%d", &n);			//단어의 개수 n을 입력받음
	while (n--) {				//다음을 n만큼 반복
		scanf("%s", arr);		//단어를 입력받아 arr배열에 저장
		sum += check(arr);		//check 함수의 리턴값(그룹단어면 1, 아니면 0)을 sum에 더함
	}
	printf("%d\n", sum);			//sum 출력
}

 

설명

 

main 함수

1) 단어의 개수 n을 입력받음

2) n번 동안 다음을 반복

   2-1) 단어를 입력받아 arr배열에 저장

   2-2) check함수를 통해 그룹 단어인지 판단

   2-3) 그룹 단어이면 1, 그룹 단어가 아니면 0을 sum에 더함

3) sum 출력

 

check 함수

1) 이중 for문을 사용하여 그룹 단어인지 판단

   (단어 안에 중복된 문자가 있으면 서로 연속되어 있는지 판단하고, 연속되어 있지 않으면 그룹 단어가 아니라고 판단)

2) 그룹 단어면 1, 아니면 0 리턴

 

728x90

'C & C++ > BOJ' 카테고리의 다른 글

[백준] 1259번: 팰린드롬수  (0) 2021.02.19
[백준] 1152번: 단어의 개수  (0) 2021.02.09
[백준] 2869번: 달팽이는 올라가고 싶다  (0) 2021.02.09
[백준] 1094번: 막대기  (0) 2021.02.08
[백준] 1008번: A/B  (0) 2021.02.08