28432

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

int main(void){
    // 끝말잇기 갯수 입력
    int num = 0;
    scanf("%d", &num);

    // 끝말잇기 입력
    char (*word_arr)[11] = (char(*)[11])malloc(sizeof(char[11])*num);
    char start = 0, end = 0;
    for(int i = 0; i < num; i++){
        scanf("%s", word_arr[i]);
    }

    // ? 기준으로 시작과 끝 구하기
    for(int i = 0; i < num; i++){
        if(word_arr[i][0] == '?'){
            if(i > 0){
                start = word_arr[i-1][strlen(word_arr[i-1]) - 1];
            }
            if(i < num - 1){
                end = word_arr[i+1][0];
            }
            break;
        }
    }

    // 후보 단어 갯수 입력
    int candidate_num = 0;
    scanf("%d", &candidate_num);
    
    for(int i = 0; i < candidate_num; i++){
        // 단어 입력
        char word[11] = {0};
        scanf("%s", word);

        int len = strlen(word);

        // 만약 시작 문자열이 있을 때 현재 단어와 시작 문열이 같지 않으면 continue;
        if(start && word[0] != start) continue;
        // 만약 끝 문자열이 있을 때 현재 단어와 끝 문열이 같지 않으면 continue;
        if(end && word[len - 1] != end) continue;

        // 중복 검사 
        int is_continue = 0;
        for(int j = 0; j < num; j++){
            if(strcmp(word_arr[j], word) == 0){
                is_continue = 1;
                break;
            }
        }

        // 중복 있으면 continue;
        if(is_continue){
            continue;
        }

        // 전부 만족 시 출력
        printf("%s\n", word);
    }

    free(word_arr);
    return 0;
}

 

자꾸 98퍼센트에서 틀렸다가 나왔다... 

반례도 없어보이고 전부 맞는데 뭐가 틀렸는지 모르겠는것... 그래서 gpt 도움 받았다....

 

근데 진짜 놀랐던게,, ㅋㅋㅋㅋㅋ 깔끔한 코드가 미쳤다. 진짜 미침. 깔끔한 코드로 바꾸니까 바로 통과됐다....

 

이전 코드는 이거에유..

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

int main(void){
    int num = 0;
    scanf("%d", &num);

    char (*word_arr)[11] = (char(*)[11])malloc(sizeof(char[11])*num);
    char start = -1, end = -1;
    for(int i = 0; i < num; i++){
        getchar();
        scanf("%s", word_arr[i]);
    }

    for(int i = 0; i < num; i++){
        if(word_arr[i][0] == '?'){
            if(i == 0){
                end = word_arr[i+1][0];
            }
            else if(i == (num-1)){
                start = word_arr[i-1][strlen(word_arr[i-1])-1];
            }
            else{
                end = word_arr[i+1][0];
                start = word_arr[i-1][strlen(word_arr[i-1])-1];
            }
            break;
        }
    }

    int candidate_num = 0;
    scanf("%d", &candidate_num);
    for(int i = 0; i < candidate_num; i++){
        char word[11] = {0};
        getchar();
        scanf("%s", word);

        int len = strlen(word);
        if(start == -1){
            if(word[len-1] != end){
                continue;
            }
        }
        else if(end == -1){
            if(word[0] != start){
                continue;
            }
        }
        else{
            if(word[len-1] != end){
                continue;
            }
            else if(word[0] != start){
                continue;
            }
        }

        int is_continue = 0;
        for(int j = 0; j < num; j++){
            if(strcmp(word_arr[j], word) == 0){
                is_continue = 1;
                break;
            }
        }

        if(is_continue){
            continue;
        }

        printf("%s\n", word);
    }

    free(word_arr);
    return 0;
}

+ Recent posts