Shiny Sky Blue Star

백준 문제 풀이/백준 (C)

C 백준 1316 그룹 단어 체커 (문자열)

gamja00 2024. 6. 30. 15:36

 


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


문제

  1. 첫째 줄에 단어의 개수 N (1 <= N <= 100) 입력.
  2. 각 문자가 모두 연속해서 나타나는 단어인 그룹단어를 구별.
  3. 첫째 줄에 그룹 단어의 개서 출력.

 

최종 코드

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

int main(void) {
    int N, count = 0, flag;
    char word[100];

    scanf_s("%d", &N);

    count = N;
    for (int i = 0; i < N; i++) {
        scanf("%s", &word);
        flag = 0;
        for (int j = 0; j < strlen(word); j++) { // 연속되는 부분을 0으로 초기화해 겹치지 않도록 만들음.
            if (word[j] == word[j + 1]) {
                word[j] = '0';
            }
            
        }
        
        for (int j = 0; j < strlen(word); j++) {
            for (int k = 0; k < j - 1; k++) {
                if (word[j] == '0') { // 연속되는 부분이었던 0일 때 넘김.
                    break;
                }
                else if (word[k] == '0') {
                    k++;
                }

                if (word[j] == word[k]) { // 똑같은 문자가 나왔을 때 == 그룹 단어가 아니므로 for문 끝냄.
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) {
                break;
            }
        }

        if (flag == 1) {
            count--;
        }
    }

    printf("%d", count);

    return 0;
}

 

0으로 초기화하는 부분 이후의 for문에서 연속해서 break를 걸 방법을 모르겠어서 새로운 변수를 추가해 for문처럼 돌릴지 flag를 추가해 따로 계산할지 고민이 됐는데 그냥 for문으로 돌리기로 했다.

 

시간 초과 안 걸려서 다행이다.