coding_test/BAEKJOON

백준 1316번 C언어 풀이

CodeJin 2021. 8. 14. 21:48

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함수에 대해 이곳을 참조하였다.

 

https://modoocode.com/93

 

C 언어 레퍼런스 - strchr 함수

 

modoocode.com