https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
그룹단어란 단어에 존재하는 모든 문자에 대해 각 문자가 연속으로 나타나는 단어를 말한다.
예를 들면 aabbccc는 그룹단어이지만 ababccc는 그룹단어가 아니며, abc는 그룹단어이다.
일정이 너무 많아 기본구조만 짜고, 세부적인 내용은 내일 해야할 듯 싶다.
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool group_checker (const char *word) {
bool a = false;
bool result = false;
for (int i = 0; i < strlen(word); i++) {
for (int j = i+1; j < strlen(word); j++) {
//tomorrow todo
}
if (a) break;
}
return result;
}
int main (void) {
int T, result = 0; // 테스트 케이스, 결과값
char input[101];
scanf("%d", &T);
while (T--) {
scanf("%s", input);
result += group_checker(input) ? 1 : 0;
}
printf("%d", result);
return 0;
}
-----------------------------------------21.08.15-----------------------------------------
문자열을 입력받아 string.h의 strchr함수를 이용하여 각 알파벳의 위치를 받아 이들의 차이가 1이 나는 경우 그룹단어로 판단하는 방법으로 코드를 작성했다.
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool group_checker (char *word);
int main (void) {
int T, result = 0; // 테스트 케이스, 결과값
char input[101];
scanf("%d", &T);
while (T--) {
scanf("%s", input);
result += group_checker(input) ? 1 : 0;
}
printf("%d", result);
return 0;
}
bool group_checker (char *word) { // 모든 단어가 한번만 등장할 때, 같은 단어가 발견 되었을 때
bool a = false; // 바깥 반복문을 탈출하기 위한 bool
bool result = true; // 결과 반환
char str = 'a'; // 알파벳
char *pch; // 주소값을 받기 위한 char 포인터
int cnt; // 알파벳 개수
int idx; // arr의 요소에 접근하기 위한 인자
for (int i = 0; i < 26; i++) {
idx = 0;
int arr[100]; // 각 알파벳의 주소를 조작한 값을 저장하기 위한 배열 선언 및 초기화
cnt = 0; // 초기화
pch = strchr(word, str); // 입력받은 문자열에 알파벳이 있는지 조사
while(pch != NULL) { // 알파벳이 들어있는 경우
cnt++;
arr[idx] = (pch - word); idx++; // 주소값을 word의 n번째로 조작후 저장, 이후 요소값+1
pch = strchr(pch + 1, str); // 이 알파벳 이후의 문자열에 또 알파벳이 들어있는지 조사
}
for (int i = 0; i < cnt-1; i++) { // 알파벳이 그룹을 이루는지 조사
if (arr[i+1]- arr[i] != 1) { // 그룹이 아닌 경우가 하나라도 발견되면
result = false; // result를 false로 바꾸고
a = true; // a를 true로 바꾼다.
}
}
if (a) break;
str++; // 다음 알파벳으로 바꾼다.
}
return result;
}
strchr함수에 대해 이곳을 참조하였다.
C 언어 레퍼런스 - strchr 함수
modoocode.com
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 10872번 C언어 풀이 (0) | 2021.08.17 |
---|---|
백준 1712번 C언어 풀이 (0) | 2021.08.16 |
백준 2941번 C언어 풀이 (0) | 2021.08.13 |
백준 5622번 C언어 풀이 (0) | 2021.08.13 |
백준 2908번 C언어 풀이 (0) | 2021.08.12 |