티스토리 뷰

끝말 잇기를 하는 프로그램을 만듭니다.

단어를 입력하고 이미 입력된 단어나 끝말 잇기가 되지 않는 단어는 확인하여 제외합니다.

end를 입력하면 입력을 끝내고 그 동안 입력한 모든 단어를 차례로 출력합니다.

입력한 단어는 그 길에 맞는 동적 할당 영역에 저장하며 입력 가능한 단어 수는 최대 100개로 제한합니다.

 

실행결과는 다음과 같습니다.

/*
실행결과

단어 입력 : apple
단어 입력 : elephant
단어 입력 : tiger
단어 입력 : rabbit
단어 입력 : tiger
이미 존재 하는 단어입니다.
단어 입력 : pineapple
단어 잇기가 불가능합니다.
단어 입력 : tomato
단어 입력 : end
apple elephant tiger rabbit tomato
*/

 

다음은 제가 작성한 코드와 그 실행결과입니다.

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

void main(void)
{
	char* letters[101] = {0};

	int isEnd = 0, count = 0;
	while (1)
	{
		char temp[41];

		//임시로 단어 입력하는 로직
		printf("단어 입력 : ");
		fgets(temp, 41, stdin);
		temp[strlen(temp) - 1] = '\0';

		if (strcmp(temp, "end") == 0) break;

		//중복검사를 수행하는 로직
		int isTwins = 0;
		for (int i = 0; i < count; i++)
		{
			if (strcmp(temp, letters[i]) == 0)
			{
				isTwins = 1;
				break;
			}
		}
		if (isTwins)
		{
			printf("이미 존재하는 단어입니다!\n");
			continue;
		}

		//이전 단어와 이어지는지 검사하는 로직
		int doNotconnect = 0;
		if (count >= 1)
		{
			if (letters[count - 1][strlen(letters[count - 1]) - 1] != temp[0])
			{
				doNotconnect = 1;
			}
		}
		if (doNotconnect)
		{
			printf("단어 잇기가 불가능합니다!\n");
			continue;
		}

		letters[count] = (char*)malloc(sizeof(char) * (strlen(temp) + 1));
		if (letters[count] == NULL)
		{
			printf("메모리가 부족합니다.\n");
			exit(1);
		}
		strcpy(letters[count], temp);
		count++;
	}
	for (int i = 0; i < count; i++)
	{
		printf("%s ", letters[i]);
		free(letters[i]);
	}
}
/*
실행결과

단어 입력 : apple
단어 입력 : elephant
단어 입력 : tiger
단어 입력 : rabbit
단어 입력 : tiger
이미 존재하는 단어입니다!
단어 입력 : pineapple
단어 잇기가 불가능합니다!
단어 입력 : tomato
단어 입력 : end
*/
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함