반응형
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=788&sca=99&sfl=wr_hit&stx=1516
#include <stdio.h>
char stc[205];
struct Node {
Node* pPrev;
Node* pNext;
int len, cnt;
char* pWord;
Node() : pPrev(nullptr), pNext(nullptr), len(0), cnt(0), pWord(nullptr) {}
Node(Node* prev, Node* next) : pPrev(prev), pNext(next), len(0), cnt(1), pWord(nullptr)
{
next->pPrev = prev->pNext = this;
}
~Node() {
if (pWord) delete[] pWord;
}
} H, T;
int strcmp(const char* pA, const char* pB, int lenA, int lenB)
{ //A가 크면 1, 같으면 0, B가 크면 -1
int len = (lenA > lenB) ? (lenB) : (lenA);
for (int i = 0; i < len; i++) {
if (pA[i] > pB[i]) return 1;
else if (pA[i] < pB[i]) return -1;
}
if (lenA > lenB) return 1;
else if (lenA == lenB) return 0;
else return -1;
}
int Input() {
for (int i = 0; i < 205; i++) stc[i] = 0;
fgets(stc, sizeof(stc), stdin);
if (strcmp("END", stc, 3, 3) == 0) return 0;
else return 1;
}
Node* GetLink(char* p, int len) {
Node* tmp = H.pNext;
while (tmp != &T) {
int rslt = strcmp(tmp->pWord, p , tmp->len, len);
if (rslt == 1) { //tmp가 더 큰 경우, tmp 바로 앞에 달아야 한다.
return tmp->pPrev;
}
else if (rslt == 0) { //둘이 같은 경우
tmp->cnt++;
return nullptr;
}
else { //p가 더 큰 경우
tmp = tmp->pNext;
}
}
return tmp->pPrev;
}
int main(void) {
while (Input()) {
H.pNext = &T; T.pPrev = &H;
H.len = -1; T.len = -2;
for (int i = 0, j = 0; stc[i] != 0; i += j + 1) {
for (j = 0; stc[i + j] != ' ' && stc[i + j] != '\n'; j++) {}
Node* pInsert = GetLink(stc + i, j);
if (pInsert) {
Node* pNew = new Node(pInsert, pInsert->pNext);
pNew->len = j;
pNew->pWord = new char[j + 1];
for (int k = 0; k < j; k++) pNew->pWord[k] = stc[i + k];
pNew->pWord[j] = 0;
}
if (stc[i + j] == '\n') break;
}
for (Node* pPrint = H.pNext; pPrint != &T;) {
printf("%s : %d\n", pPrint->pWord, pPrint->cnt);
Node* pDel = pPrint;
pPrint = pPrint->pNext;
delete pDel;
}
}
return 0;
}
반응형
'프로그래밍 알고리즘' 카테고리의 다른 글
[정올 1535] 단어집합2 (0) | 2023.01.05 |
---|---|
[정올 1534] 10진수를 2,8,16진수로 (0) | 2023.01.05 |
[정올 1462] 보물섬 (0) | 2023.01.05 |
[정올 1457] 영역 구하기 (0) | 2023.01.05 |
[정올 1419] 엔디안 (0) | 2023.01.04 |