코딩해요/C

[백준/C언어] 1316번: 그룹 단어 체커

yenas0 2024. 7. 8. 22:53
반응형


알고리즘 구성

1. 단어 개수(N) 입력받기

int N;
scanf("%d", &N);

 

2. 그룹 단어의 개수(count)를 N으로 초기화 (일단 N개로 가정 후 그룹단어가 아닐 시에 한개 씩 마이너스 시킬 예정)

int count = N;

 

3. N개의 단어를 처리하기 위한 반복문 작성

for (int i = 0; i < N; i++)

 

4. 단어를 받기 위해 str 배열 사용 (문자열 하나씩 확인하기에 용이)

char str[100];
scanf("%s", str);

 

5. 각 알파벳이 등장했는지 여부를 배열로 확인함(check 배열)

bool check[26] = { false };

 

6. prev_char는 이전 문자를 저장, is_group_word는 그룹 단어 맞는지 확인

int prev_char = 0;   
bool is_group_word = true;

 

7. 내부 반복문으로 문자열 하나씩 검사(0 ~ streln(str)까지)

for (int j = 0; j < strlen(str); j++)

 

8. 현재 문자가 나왔는지 확인하기 위해서 alphabet인덱스를 계산함 (a의 아스키 코드 값이 97이므로 97을 뺌)

int alphabet = str[j] - 97;

 

9. 지금 문자열이 이전에 안나왔으면(check[alphabet]이 false면) check를 true로 바꾸고 prev_char에다가 지금 문자열의 인덱스를 넣음

if (check[alphabet] == false) {
    check[alphabet] = true;
    prev_char = alphabet;
}

 

9-2. 만약에 이미 나온 문자열이면 지금 문자열 인덱스(alphabet)랑 이전의 문자열의 인덱스(prev_char)가 다르다면 그룹단어가 아님(is_group_word를 false로 변경) -> 이후 문자열 확인할 필요 없으므로 break 통해 반복문 탈출

else {
    if (alphabet != prev_char) {
        is_group_word = false;
        break;
    }                  
}

 

10. is_group_word가 false인 경우에 count를 하나씩 줄임

if (is_group_word == false)
    count--;

 

11. 그룹단어의 수 (count) 출력

printf("%d", count);

 

 

 

 

 

 


답..

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <string.h>

int main(void) {
    int N;
    scanf("%d", &N);

    int count = N;

    for (int i = 0; i < N; i++) {
        char str[100];
        scanf("%s", str);

        bool check[26] = { false };
        int prev_char = 0;   
        bool is_group_word = true;

        for (int j = 0; j < strlen(str); j++) {
            int alphabet = str[j] - 97;
            if (check[alphabet] == false) {
                check[alphabet] = true;
                prev_char = alphabet;
            }
            else {
                if (alphabet != prev_char) {
                    is_group_word = false;
                    break;
                }                  
            }               
        }

        if (is_group_word == false)
            count--;
    }

    printf("%d", count);

    return 0;
}

 

 

반응형