반응형
문제 설명
영어로 작성된 텍스트파일에서 단어를 추출하여 인덱스를 구성하는 프로그램을 작성해야 한다.
문제 해결 핵심 포인트
- 텍스트 파일의 영어들을 단어 단위로 구분하고 알파벳 순으로 정렬하여 인덱스 정보를 제공해야 한다.
- 입력 : 영어 문장이 저장된 임의의 텍스트 파일
- 출력 : 텍스트 파일에 나타난 단어를 알파벳 순으로 인덱스 생성
- 단어에 대한 효과적인 탐색을 위해 이진 탐색 트리와 해시 테이블을 이용한다.
- 단순 배열만으로 프로그램을 만 들 경 우보다 성능이 뛰어나다.
입출력 예
단어 | 라인번호 |
Adam | 2, 5, 6 |
Eve | 3, 7 |
소스코드
소스코드는 별도로 올리지는 않고, 작성한 코드 중 각 데이터에 대해 자료형 정의한 구조체만 간단하게 올리려고 한다.
typedef struct lineHead { //줄을 저장하는 노드
int linenum; // 줄번호 카운팅
struct lineHead* link; //단어의 출현 줄을 나타낼 포인터 구조체 변수
}lineHead;
typedef struct word_s { //단어를 구성하는 노드
char word[WORD_LENGTH]; //단어를 저장
lineHead* nums; //단어의 연속된 출현 줄 번호를 관리할 라인구조체 포인터 변수
}word_s;
typedef struct node { //이진 탐색 트리 노드
word_s index; //단어 구조체 변수
struct node* left; //왼쪽 자식 노드를 가리킬 포인터
struct node* right; //오른쪽 자식 노드를 가리킬 포인터
}node;
실행 화면
우선 위와 같이 5개의 메뉴를 구성하였다.
1번을 입력하게 되면 아래와 같이 나오게 된다.
The last leaf라는 영문으로 이루어진 텍스트 파일을 입력하고 인덱스 한 파일의 이름을 example로 만들어 주었다.
다음은 2번을 입력해보자.
2번을 입력하게 되면 example 파일에 The last leaf에 나오게 되는 영단어들이 알파벳순으로 정렬되어 출력된 것을 확인할 수 있다.
다음은 3번을 입력해 보자.
3번과 4번은 원본 파일인지 인덱스 파일인지만 다르고 출력 값은 같다. 그리고 5번을 입력하면 프로그램이 종료된다.
한마디
이번 과제를 해결하기 위해 검색도 많이 하고 했는데, 자료가 많이 없어서 구현하는데 고민 좀 많이 했던 것 같다. 혹시나 나와 같은 문제를 구현해야 하는데 모르는 게 있으면 댓글로 물어봐주면 아는 것은 알려드릴게요.